您的位置:首页 > 产品设计 > UI/UE

iOS监听UITextView、UITextField键盘删除键

2016-06-08 15:46 543 查看
今天做了一个设置锁屏密码功能,其中我使用的是四个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

再看.m文件

#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: