Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UITextField重写应更改字符范围_Ios_Objective C_Uitextfield_Overriding - Fatal编程技术网

Ios UITextField重写应更改字符范围

Ios 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; } ...

我编写了自己的UITextField子类:

BWPicker.h

@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: