iOS监听UITextView、UITextField键盘删除键

最近做了一个使用键盘删除键删东西的功能,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


再看.m文件

#import "YNTextField.h"


@implementation YNTextField


- (void)deleteBackward {

    !!!这里要调用super方法,要不然删不了东西

    [super deleteBackward];

    

    if ([self.yn_delegate respondsToSelector:@selector(ynTextFieldDeleteBackward:)]) {

        [self.yn_delegate ynTextFieldDeleteBackward:self];

    }

}



@end


然后使用就用这个继承的控件实现代理,就完工了。是不是So easy


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值