您的位置:首页 > 移动开发 > Objective-C

Objective-C监听键盘删除按钮

2016-03-28 18:10 351 查看
响应键盘删除按钮的事件,常规的是根据UITextfield或者UISearchBar的didChange代理方法中内同的改变来判断是否进行了点击删除按钮。但是当输入框没有内容时,就无法捕捉到删除的事件了。例如微信选择好友时用键盘的删除按钮删除已选择的好友头像。

实现的思路是利用OC的运行时机制,替换掉系统的删除runtime函数。首先建一个UItextfield的category:UITextField+YX

头文件代码:

#import <UIKit/UIKit.h>
@protocol YXTextFieldDelegate <UITextFieldDelegate>
@optional
- (void)textFieldDidDeleteBackward:(UITextField *)textField;
@end
@interface UITextField (YX)
@property (weak, nonatomic) id<YXTextFieldDelegate> delegate;
@end
/**
*  监听删除按钮
*  object:UITextField
*/
extern NSString * const YXTextFieldDidDeleteBackwardNotification;


源文件中的代码:

#import "UITextField+YX.h"
#import <objc/runtime.h>

NSString * const YXTextFieldDidDeleteBackwardNotification = @"textfield_did_notification";

@implementation UITextField(YX)

+ (void)load {
Method method1 = class_getInstanceMethod([self class], NSSelectorFromString(@"deleteBackward"));
Method method2 = class_getInstanceMethod([self class], @selector(yx_deleteBackward));
method_exchangeImplementations(method1, method2);
}

- (void)yx_deleteBackward {
[self yx_deleteBackward];

if ([self.delegate respondsToSelector:@selector(textFieldDidDeleteBackward:)])
{
id <YXTextFieldDelegate> delegate  = (id<YXTextFieldDelegate>)self.delegate;
[delegate textFieldDidDeleteBackward:self];
}

[[NSNotificationCenter defaultCenter] postNotificationName:YXTextFieldDidDeleteBackwardNotification object:self];
}

@end


在使用的文件中遵循YXTextFieldDelegate代理,代理的方法即为点击删除按钮事件:

- (void)textFieldDidDeleteBackward:(UITextField *)textField {
//删除事件
}


github:监听键盘删除按钮,仿微信好友选择
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: