最近做了一个使用键盘删除键删东西的功能,UITextField监听删除键:
起初通过代理方法中 text长度可以判断是不是删除
-
(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if ([text isEqualToString:@""]) {}
}
但是textField在没有字符串时系统键盘监听不到点击了删除按钮,尼玛啊,我要用的就是没字时删除!!!
网上也没有其他办法,没办法只能自己研究它,潜心研究。。。终于自己实现了一种优雅的方式监听删除键,哈哈哈
先说原理UITextField其实里面用的是UIKeyInput,先看UIKeyInput.h
@protocol UIKeyInput <UITextInputTraits>
- (BOOL)hasText;
- (void)insertText:(NSString *)text;
- (void)deleteBackward; <-------就是它删除方法
@end
解决方法: UITextFieldDelegate并没有将之抛出来,所以我们要做的就是把这个事件抛出来。
自定义一个类,继承UITextField
import <UIKit/UIKit.h>
@protocol ZTextFieldDelegate <NSObject>
- (void)zTextFieldDeleteBackward:(YNTextField *)textField;
@end
@interface ZTextField : UITextField
@property (nonatomic, assign) id <ZTextFieldDelegate> z_delegate;
@end
再看.m文件
import "ZTextField.h"
@implementation ZTextField
-
(void)deleteBackward {
!!!这里要调用super方法,要不然删不了东西
[super deleteBackward];
if ([self.z_delegate respondsToSelector:@selector(zTextFieldDeleteBackward:)]) {[self.z_delegate zTextFieldDeleteBackward:self];
}
}
@end
然后使用就用这个继承的控件实现代理,就完工了。是不是So easy