最近做了一个使用键盘删除键删东西的功能,UITextView监听删除键:
#pragma mark - UITextViewDelegate
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if ([text isEqualToString:@""]) {
}
}
后来在别的地方要用UITextField这个控件,起初在网上找到了这个方法:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if ([text isEqualToString:@""]) {
}
}
跟textView类似可以监听到删除,但是在textField没有字符串时系统键盘监听不到点击了删除按钮,尼玛啊,我要用的就是没字时删除!!!网上也没有其他办法,没办法只能自己研究它,潜心研究。。。终于自己实现了一种优雅的方式监听删除键,哈哈哈
先说原理UITextField其实里面用的是UIKeyInput,先看UIKeyInput.h
@protocol UIKeyInput <UITextInputTraits>
- (BOOL)hasText;
- (void)insertText:(NSString *)text;
- (void)deleteBackward; <-------就是它删除方法
@end
使用首先继承 UITextField:
#import <UIKit/UIKit.h>
@class YNTextField;
@protocol YNTextFieldDelegate <NSObject>
- (void)ynTextFieldDeleteBackward:(YNTextField *)textField;
@end
@interface YNTextField : UITextField
@property (nonatomic, assign) id <YNTextFieldDelegate> yn_delegate;
@end
#import "YNTextField.h"
@implementation YNTextField
- (void)deleteBackward {
!!!这里要调用super方法,要不然删不了东西
[super deleteBackward];
if ([self.yn_delegate respondsToSelector:@selector(ynTextFieldDeleteBackward:)]) {
[self.yn_delegate ynTextFieldDeleteBackward:self];
}
}
@end