我有一个UITextField,它是从另一个模块更新的(我将我的UITextField传递给上面提到的模块来填充它)。我需要一种方法来识别UITextField的文本值何时在UITextField最初所在的模块内被更改。 UITextField Delegate方法或UIControlEvents将无法正常工作,因为文本是以编程方式填充的。
答案 0 :(得分:1)
我不太明白你所说的"不同的模块",但你可以尝试订阅UITextFieldTextDidChangeNotification。
获得通知的另一种方法是使用Key-Value Observing。但是,我不知道它是否适用于text属性。
答案 1 :(得分:1)
将以下内容放在某处,例如-viewDidLoad:
[textField addObserver:self forKeyPath:@"text" options:NSKeyValueObservingOptionNew context:nil];
然后添加-observeValueForKeyPath,如:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if (object == textField)
{
// Do whatever with your text field here
}
}
只有在以编程方式设置文本时才会调用此方法,而不是在用户键入字段时调用。
或者只是UITextField的子类并传入您的子类。您可以根据需要覆盖setText: