iOS监听键盘的删除按键事件

  1. 需求场景描述
    最近项目里有个场景,搜索添加成员的时候,需要类似于微信创建讨论组加人时的效果:启动搜索输入文本,点击删除文本,当文本全删除完的时候,在点击删除按键,可以删除选中的人,或者取消搜索状态。

  2. 技术要点
    这里,最主要的难点就是监听键盘删除键的点击事件。不管你用的是UITextView还是UITextField,当它们本身没有内容的时候点击删除按键,其实delegate是没有任何响应的,这里就需要我们用其它的办法监听到点击事件。

  3. 实现过程
    查看API我们不难发现,其实系统是有事件抛出来的:

        ```
        @protocol UIKeyInput 
    
        - (BOOL)hasText;
        - (void)insertText:(NSString *)text;
        - (void)deleteBackward;
    
        @end
        ```
    

    所以,我们现在要做的就是实现这个协议,拿到deleteBackward的回调。
    不过这个协议已经被UITextField实现了:

        NS_CLASS_AVAILABLE_IOS(2_0) @interface UITextField : UIControl  
    

    但是UITextFieldDelegate并没有抛出来。
    所以,我们要做的就是从UITextField里面抛出这个协议。
    自定义一个类,继承UITextField 

  4. #import

    @protocol keyInputTextFieldDelegate

    - (void) deleteBackward;

    @end

    @interface UITextFieldKeybordDelete : UITextField
    @property (nonatomic,weak) idkeyInputDelegate;
    @end
  5. #import "UITextFieldKeybordDelete.h"

    @implementation UITextFieldKeybordDelete

    /*
    // Only override drawRect: if you perform custom drawing.
    // An empty implementation adversely affects performance during animation.
    - (void)drawRect:(CGRect)rect {
        // Drawing code
    }
    */

    - (void) deleteBackward{
        [super deleteBackward];
        
        if (_keyInputDelegate && [_keyInputDelegate respondsToSelector:@selector(deleteBackward)]) {
            [_keyInputDelegate deleteBackward];
        }
        
    }

    @end

    到此,我们已经能知道键盘的删除事件了,后面需要做什么逻辑,直接在deleteBackward回调里做就OK!

你可能感兴趣的:(IOS学习笔记)