textfield监听删除按键 包括没有输入文字时(ios8 也可以使用)

来源:互联网 发布:表格中数据单位转换 编辑:程序博客网 时间:2024/06/05 21:56


@interface PFTextfield : UITextField


@end

--------------

@implementation PFTextfield


/**

 *  调用的私有方法,子类中重写该方法,父类执行

 *

 *  用途:主要应用于ios8没有输入文字时调用删除按钮

 *

 *  @param textField textfield

 *

 *  @return 是否可以删除

 */


- (BOOL)keyboardInputShouldDelete:(UITextField *)textField {

    BOOL shouldDelete =YES;

    

    if ([UITextFieldinstancesRespondToSelector:_cmd]) {

        BOOL (*keyboardInputShouldDelete)(id,SEL, UITextField *) = (BOOL (*)(id,SEL, UITextField *))[UITextFieldinstanceMethodForSelector:_cmd];

        

        if (keyboardInputShouldDelete) {

            shouldDelete = keyboardInputShouldDelete(self,_cmd, textField);

        }

    }

    

    BOOL isIos8 = ([[[UIDevicecurrentDevice] systemVersion]intValue] == 8);

    BOOL isLessThanIos8_3 = ([[[UIDevicecurrentDevice] systemVersion]floatValue] < 8.3f);

    

    if (![textField.textlength] && isIos8 && isLessThanIos8_3) {

        [selfdeleteBackward];

    }

    

    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([selfclass], NSSelectorFromString(@"deleteBackward"));

    Method method2 =class_getInstanceMethod([selfclass], @selector(wj_deleteBackward));

    method_exchangeImplementations(method1, method2);

}


- (void)wj_deleteBackward {

    [selfwj_deleteBackward];

    

    if ([self.delegaterespondsToSelector:@selector(textFieldDidDeleteBackward:)])

    {

        id <TextFieldDeleteDelegate> delegate  = (id<TextFieldDeleteDelegate>)self.delegate;

        [delegate textFieldDidDeleteBackward:self];

    }

    

    [[NSNotificationCenterdefaultCenter] postNotificationName:CustomTextFieldDidDeleteBackwardNotificationobject:self];

};

@end


获取资料于:

http://stackoverflow.com/questions/25354467/detect-backspace-in-uitextfield-in-ios8

====

http://www.jianshu.com/p/d2c2f4aaef0d


0 0