您的位置:首页 > 移动开发 > IOS开发

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: