2014-08-28 34 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;