需求场景描述
最近项目里有个场景,搜索添加成员的时候,需要类似于微信创建讨论组加人时的效果:启动搜索输入文本,点击删除文本,当文本全删除完的时候,在点击删除按键,可以删除选中的人,或者取消搜索状态。技术要点
这里,最主要的难点就是监听键盘删除键的点击事件。不管你用的是UITextView还是UITextField,当它们本身没有内容的时候点击删除按键,其实delegate是没有任何响应的,这里就需要我们用其它的办法监听到点击事件。实现过程
查看API我们不难发现,其实系统是有事件抛出来的:```@protocol UIKeyInput <UITextInputTraits>- (BOOL)hasText;- (void)insertText:(NSString *)text;- (void)deleteBackward;@end```
所以,我们现在要做的就是实现这个协议,拿到deleteBackward的回调。
不过这个协议已经被UITextField实现了:NS_CLASS_AVAILABLE_IOS(2_0) @interface UITextField : UIControl <UITextInput, NSCoding>
但是UITextFieldDelegate并没有抛出来。
所以,我们要做的就是从UITextField里面抛出这个协议。
自定义一个类,继承UITextField
到此,我们已经能知道键盘的删除事件了,后面需要做什么逻辑,直接在deleteBackward回调里做就OK!