2015-11-17 32 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,所以我從來沒有想過要回到界面構建器中進行任何更改。好決定! –