iOS-监听键盘删除按钮的点击事件

核心思想:利用Runtime动态替换方法,拦截deleteBackward方法实现自定义代理
具体看下面代码

#import 

@protocol SPTextFieldDelegate 
@optional
- (void)textFieldDidDeleteBackward:(UITextField *)textField;
@end

@interface UITextField (SPExtension)
@property (weak, nonatomic) id delegate;
@end
/**
 *  监听删除按钮
 *  object:UITextField
 */
extern NSString * const SPTextFieldDidDeleteBackwardNotification;
#import "UITextField+SPExtension.h"
#import 

NSString * const SPTextFieldDidDeleteBackwardNotification = @"textfield_did_notification";

@implementation UITextField (SPExtension)

+ (void)load {
    Method method1 = class_getInstanceMethod([self class], NSSelectorFromString(@"deleteBackward"));
    Method method2 = class_getInstanceMethod([self class], @selector(sp_deleteBackward));
    method_exchangeImplementations(method1, method2);
}
- (void)sp_deleteBackward {
    [self sp_deleteBackward];
    
    if ([self.delegate respondsToSelector:@selector(textFieldDidDeleteBackward:)])
    {
        id  delegate  = (id)self.delegate;
        [delegate textFieldDidDeleteBackward:self];
    }
    
    [[NSNotificationCenter defaultCenter] postNotificationName:SPTextFieldDidDeleteBackwardNotification object:self];
}
@end

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

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

你可能感兴趣的:(iOS-监听键盘删除按钮的点击事件)