2015-11-17 89 views
2

检测退格的明确答案是通过创建UITextField的子类并覆盖deleteBackward属性。iOS:使用UITextField子类检测空的UITextField中的退格

我创建了一个子类的UITextField子类,但我得到这个错误:

'NSInvalidArgumentException', reason: '-[UITextField setMyDelegate:]: unrecognized selector sent to instance

这是我的子类代码:

我TextField.h:

@protocol MyTextFieldDelegate <NSObject> 
@optional 
- (void)textFieldDidDelete; 
@end 

@interface MyTextField : UITextField<UIKeyInput> 
//create "myDelegate" 
@property (nonatomic, assign) id<MyTextFieldDelegate> myDelegate; 
@end 

My TextField.m:

- (void)deleteBackward { 
    [super deleteBackward]; 

    if ([_myDelegate respondsToSelector:@selector(textFieldDidDelete)]){ 
     [_myDelegate textFieldDidDelete]; 
    } 
} 

在我的ViewController,我想访问的UITextField子我做到以下几点:

#import "MyTextField.h" 

<MyTextFieldDelegate> 
@property (nonatomic, strong) IBOutlet MyTextField *passcode1; 
self.passcode1.myDelegate = self; 

任何想法,为什么我收到了无法识别的选择错误?它看起来像我在UITextField的子类中正确地做了所有事情。

+0

sry ...我错过了:P –

+0

@ Mr.T对我为什么收到错误有任何想法? –

+0

你在视图控制器中有方法textfieldiddlete吗? –

回答

2

问题出在您的插座上。该属性由您的自定义类定义,但在Interface Builder中添加了一个普通的旧UITextField。因此在运行时出现错误。在Interface Buldier中,将文本字段的类更新为您的自定义类。

+0

谢谢!这是问题所在,我在创建子类之前创建了UI,所以我从来没有想过要回到界面构建器中进行任何更改。好决定! –