Ios UITextField重写应更改字符范围
我编写了自己的UITextField子类: BWPicker.hIos UITextField重写应更改字符范围,ios,objective-c,uitextfield,overriding,Ios,Objective C,Uitextfield,Overriding,我编写了自己的UITextField子类: BWPicker.h @interface BWPicker : UITextField ... @end BWPicker.m @implementation BWPicker - (BOOL)shouldChangeTextInRange:(UITextRange *)range replacementText:(NSString *)text { return NO; } ...
@interface BWPicker : UITextField
...
@end
BWPicker.m
@implementation BWPicker
- (BOOL)shouldChangeTextInRange:(UITextRange *)range replacementText:(NSString *)text
{
return NO;
}
...
@end
但由于某些原因,覆盖不起作用,我仍然能够编辑文本字段的内容
另一个选项是实现UITEputDelegate,但我确实不想设置self.delegate=self代码>
是否有其他防止编辑的方法,最好不使用代理?(我仍然希望能够通过self.text=…
)设置文本。shouldChangeTextInRange
不是UITextField
的一种方法,这就解释了为什么在子类化UITextField
时重写不起作用,因为没有什么可重写的
如果您不想执行self.delegate=self,您可以始终子类化UITextFieldDelegate
,并在那里实现textField:shouldChangeCharactersRange:replacementString:
,比如MyTextFieldDelegate,然后将self.delegate设置为该类的实例。或者干脆禁用它:
someTextField.enabled = NO;
正确的委托方法名称为textField:ShouldChangeCharactersRange:replacementString: