iOS-监听UITextView、UITextField键盘删除键

今天做了一个设置锁屏密码功能,其中我使用的是四个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 (nonatomicassignid <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

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值