2014-08-28 35 views
1

我寫我自己的UITextField子類:的UITextField覆蓋shouldChangeCharactersInRange

BWPicker.h

@interface BWPicker : UITextField 

    ... 

@end 

BWPicker.m

@implementation BWPicker 

    - (BOOL)shouldChangeTextInRange:(UITextRange *)range replacementText:(NSString *)text 
    { 
     return NO; 
    } 

    ... 

@end 

但由於某些原因,倍率不不行,我仍然可以編輯文本字段的內容。

另一種選擇是實行UITextInputDelegate,但我真的不希望設置self.delegate = self;

是否有其他的方法來防止編輯,最好不使用委託的? (我仍然希望能夠通過self.text = ...設置文本)

+0

正確的委託方法名稱是textField:shouldChangeCharactersInRange:replacementString: – rdelmar 2014-08-28 20:10:48

回答

0

shouldChangeTextInRange不是UITextField的方法,這也解釋了爲什麼,因爲沒有什麼可重寫覆蓋沒有,當你繼承UITextField工作,其原因。

如果你不想做self.delegate = self,那麼你總是可以繼承UITextFieldDelegate的子類並在那裏實現textField:shouldChangeCharactersInRange:replacementString:,比如說MyTextFieldDelegate,並且設置self.delegate爲一個實例。或者直接禁用它:

someTextField.enabled = NO;