UITextField覆盖shouldChangeCharactersInRange

时间:2014-08-28 19:57:19

标签: ios objective-c uitextfield override

我编写了自己的UITextField子类:

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 = ...

设置文本

1 个答案:

答案 0 :(得分:0)

shouldChangeTextInRange不是UITextField的方法,它解释了当您继承UITextField时覆盖不起作用的原因,因为没有任何内容可以覆盖。

如果你不想做self.delegate = self,你可以随时继承UITextFieldDelegate并在那里实现textField:shouldChangeCharactersInRange:replacementString:,比如MyTextFieldDelegate,并将self.delegate设置为该实例。或者只是禁用它:

someTextField.enabled = NO;