【问题标题】:Listen UITextField setText听 UITextField setText
【发布时间】:2014-08-15 13:01:42
【问题描述】:

我有一个从不同模块更新的 UITextField(我将我的 UITextField 传递给上述模块以填充它)。我需要一种方法来识别 UITextField 的文本值何时在 UITextField 最初所在的模块内发生更改。 UITextField 委托方法或 UIControlEvents 将不起作用,因为文本是以编程方式填充的。

【问题讨论】:

  • 您可以继承 UITextField 并覆盖 - setText: 和/或 - setAttributedText: 方法,并将其传递给模块。

标签: ios objective-c iphone


【解决方案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:

【讨论】:

    【解决方案2】:

    我不太明白您所说的“不同模块”是什么意思,但您可以尝试订阅UITextFieldTextDidChangeNotification

    另一种获得通知的方法是使用Key-Value Observing。不过,我不知道它是否适用于 text 属性。

    【讨论】:

    • UIKit 不支持 KVO
    猜你喜欢
    • 1970-01-01
    • 2013-02-14
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多