textfield监听删除按键 包括没有输入文字时(ios8 也可以使用)
2016-02-23 11:45
567 查看
@interface PFTextfield :
UITextField
@end
--------------
@implementation PFTextfield
/**
* 调用的私有方法,子类中重写该方法,父类执行
*
* 用途:主要应用于ios8中
没有输入文字时调用删除按钮
*
* @param textField textfield
*
* @return 是否可以删除
*/
- (BOOL)keyboardInputShouldDelete:(UITextField *)textField {
BOOL shouldDelete =
YES;
if ([UITextField
instancesRespondToSelector:_cmd]) {
BOOL (*keyboardInputShouldDelete)(id,
SEL, UITextField *) = (BOOL (*)(id,
SEL, UITextField *))[UITextField
instanceMethodForSelector:_cmd];
if (keyboardInputShouldDelete) {
shouldDelete = keyboardInputShouldDelete(self,
_cmd, textField);
}
}
BOOL isIos8 = ([[[UIDevice
currentDevice] systemVersion]
intValue] == 8);
BOOL isLessThanIos8_3 = ([[[UIDevice
currentDevice] systemVersion]
floatValue] < 8.3f);
if (![textField.text
length] && isIos8 && isLessThanIos8_3) {
[self
deleteBackward];
}
return shouldDelete;
}
@end
==========================
@protocol TextFieldDeleteDelegate <UITextFieldDelegate>
@optional
- (void)textFieldDidDeleteBackward:(UITextField *)textField;
@end
@interface UITextField (DeleteButton)
@property (weak,
nonatomic) id<TextFieldDeleteDelegate> delegate;
@end
/**
* 监听删除按钮
* object:UITextField
*/
extern NSString *
const CustomTextFieldDidDeleteBackwardNotification;
------------
#import "UITextField+DeleteButton.h"
#import <objc/runtime.h>
NSString * const CustomTextFieldDidDeleteBackwardNotification =
@"com.custom.textfield.did.notification";
@implementation UITextField (WJ)
+ (void)load {
//交换2个方法中的IMP
Method method1 =
class_getInstanceMethod([self
class], NSSelectorFromString(@"deleteBackward"));
Method method2 =
class_getInstanceMethod([self
class], @selector(wj_deleteBackward));
method_exchangeImplementations(method1, method2);
}
- (void)wj_deleteBackward {
[self
wj_deleteBackward];
if ([self.delegate
respondsToSelector:@selector(textFieldDidDeleteBackward:)])
{
id <TextFieldDeleteDelegate> delegate = (id<TextFieldDeleteDelegate>)self.delegate;
[delegate textFieldDidDeleteBackward:self];
}
[[NSNotificationCenter
defaultCenter] postNotificationName:CustomTextFieldDidDeleteBackwardNotification
object:self];
};
@end
获取资料于: http://stackoverflow.com/questions/25354467/detect-backspace-in-uitextfield-in-ios8
==== http://www.jianshu.com/p/d2c2f4aaef0d
UITextField
@end
--------------
@implementation PFTextfield
/**
* 调用的私有方法,子类中重写该方法,父类执行
*
* 用途:主要应用于ios8中
没有输入文字时调用删除按钮
*
* @param textField textfield
*
* @return 是否可以删除
*/
- (BOOL)keyboardInputShouldDelete:(UITextField *)textField {
BOOL shouldDelete =
YES;
if ([UITextField
instancesRespondToSelector:_cmd]) {
BOOL (*keyboardInputShouldDelete)(id,
SEL, UITextField *) = (BOOL (*)(id,
SEL, UITextField *))[UITextField
instanceMethodForSelector:_cmd];
if (keyboardInputShouldDelete) {
shouldDelete = keyboardInputShouldDelete(self,
_cmd, textField);
}
}
BOOL isIos8 = ([[[UIDevice
currentDevice] systemVersion]
intValue] == 8);
BOOL isLessThanIos8_3 = ([[[UIDevice
currentDevice] systemVersion]
floatValue] < 8.3f);
if (![textField.text
length] && isIos8 && isLessThanIos8_3) {
[self
deleteBackward];
}
return shouldDelete;
}
@end
==========================
@protocol TextFieldDeleteDelegate <UITextFieldDelegate>
@optional
- (void)textFieldDidDeleteBackward:(UITextField *)textField;
@end
@interface UITextField (DeleteButton)
@property (weak,
nonatomic) id<TextFieldDeleteDelegate> delegate;
@end
/**
* 监听删除按钮
* object:UITextField
*/
extern NSString *
const CustomTextFieldDidDeleteBackwardNotification;
------------
#import "UITextField+DeleteButton.h"
#import <objc/runtime.h>
NSString * const CustomTextFieldDidDeleteBackwardNotification =
@"com.custom.textfield.did.notification";
@implementation UITextField (WJ)
+ (void)load {
//交换2个方法中的IMP
Method method1 =
class_getInstanceMethod([self
class], NSSelectorFromString(@"deleteBackward"));
Method method2 =
class_getInstanceMethod([self
class], @selector(wj_deleteBackward));
method_exchangeImplementations(method1, method2);
}
- (void)wj_deleteBackward {
[self
wj_deleteBackward];
if ([self.delegate
respondsToSelector:@selector(textFieldDidDeleteBackward:)])
{
id <TextFieldDeleteDelegate> delegate = (id<TextFieldDeleteDelegate>)self.delegate;
[delegate textFieldDidDeleteBackward:self];
}
[[NSNotificationCenter
defaultCenter] postNotificationName:CustomTextFieldDidDeleteBackwardNotification
object:self];
};
@end
获取资料于: http://stackoverflow.com/questions/25354467/detect-backspace-in-uitextfield-in-ios8
==== http://www.jianshu.com/p/d2c2f4aaef0d
相关文章推荐
- iOS开发启动页引导图
- ios开发之你真的了解了KVC吗?
- ios推送消息的基本原理--了解
- iOS开发7:自动旋转与调整大小
- ios开发UDP协议发送广播寻找设备
- 整理iOS常用的第三方框架
- ios开发UDP协议发送广播寻找设备
- 利用runtime 实现自定义Model归档
- iOS的远程消息推送服务。
- iOS 删除已经配置的类库和移除CocoaPods
- ios布局约束
- iOS- Exception Type: 00000020:什么是看门狗机制
- [iOS]分享一段用系统API生产二维码的代码
- ios沙盒路径
- iOS之修改Xcode创建文件自动生成的注释
- iOS8 【xcode6中添加pch全局引用文件】
- ios 绘图处理
- ios无法定位CLLocationManager Delegate方法不能被调用的问题
- iOS新鲜的AFNetworking3使用方法
- 多线程GCD(二)