今天做了一个设置锁屏密码功能,其中我使用的是四个UITextField,上一个UITextField输入之后,下一个UITextField响应,这时的UITextField里面没有任何值,我想过使用UITextFieldTextDidChangeNotification通知,但是只有输入值时才能监听,此法行不通啊。
还找了一下如何获取深处这个按钮,UIButton *clearButton = [myTextField valueForKey:@"_clearButton"];
[clearButton setImage:[UIImagenew] forState:UIControlStateNormal];重写其中的点击方法也失败了。
参考其讲解点击打开链接
我现在想做的是到下一个UITextField时,我点击键盘自带的删除按钮时,上一个UITextField响应删除方法,经研究发现一个办法,代码如下:
先说原理UITextField其实里面用的是UIKeyInput,先看UIKeyInput.h
@protocol UIKeyInput <UITextInputTraits>
- (BOOL)hasText;
- (void)insertText:(NSString *)text;
- (void)deleteBackward; <-------就是它删除方法
@end
使用首先继承 UITextField:
.h文件
#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_delegaterespondsToSelector:@selector(ynTextFieldDeleteBackward:)]) {
[self.yn_delegate ynTextFieldDeleteBackward:self];
}
}
- (BOOL)keyboardInputShouldDelete:(YNTextField *)textField { BOOL shouldDelete =YES; if ([YNTextFieldinstancesRespondToSelector:_cmd]) { BOOL (*keyboardInputShouldDelete)(id,SEL,UITextField *) = (BOOL (*)(id,SEL,UITextField *))[UITextFieldinstanceMethodForSelector:_cmd]; if (keyboardInputShouldDelete) { shouldDelete = keyboardInputShouldDelete(self,_cmd, textField); } } if ([[[UIDevicecurrentDevice]systemVersion]intValue] >=8) { [selfdeleteBackward]; } return shouldDelete; } @end
- (void)hqTextFieldDeleteBackward:(HQTextField *)textField { }
博主提供几篇具有帮助的文章
iOS - 监听UITextField键盘删除键之分类
http://stackoverflow.com/questions/27921485/deletebackward-not-getting-called-for-custom-uitextfield
http://stackoverflow.com/questions/1977934/detect-backspace-in-uitextfield
http://stackoverflow.com/questions/25371254/how-to-detect-delete-key-on-an-uitextfield-in-ios-8
http://stackoverflow.com/questions/27921485/deletebackward-not-getting-called-for-custom-uitextfield