0

我的 UItextFields 上有一个观察者。它基本上是查看“启用”属性是否已更改。

如果启用状态发生变化,我希望运行一个名为 fade 的方法。Fade 需要将 TextField 传递给它。

如何使用与发送消息的观察者关联的文本字段?

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:     (NSDictionary *)change context:(void *) context;
{
    int new = [change objectForKey:NSKeyValueChangeNewKey];
    int old = [change objectForKey:NSKeyValueChangeOldKey];

    if (new != old)
    {
        [self fadeEnable:"requires txtField"];
    }
}

谢谢

4

1 回答 1

2

如文档中所示, https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSKeyValueObserving_Protocol/Reference/Reference.html,方法调用中的参数'Object'封装了您的文本域。你只需要施放它就可以了。

要投射它,请使用:

UITextField *tf = (UITextField *)object;

编辑以解决您的后续问题:在手势识别器的情况下,您希望获得将识别器添加到的视图。“发件人”是识别器本身,sender.view 将为您提供相关的视图。这一切都不会改变,因为识别器仅适用于 VIEWS。

现在,有了观察者,你不一定想要一个视图。你想要一个对象。这就是为什么 'object' 是 'id' 类型的原因,因此您可以将观察者添加到任意类型的对象中。当然,缺点是你需要演员表。如果您不知道要转换为哪种类型,则

-isKindOfClass:

方法可能有用。

哦,这些都不是关于界面构建器与在代码中做事。

如果你觉得这很令人困惑,我建议你去研究有关gestureRecognizers 和 Key-Value-Observing 的文档。如果您有具体问题,请告诉我,或者只是提出一个新问题;)

于 2013-06-26T10:56:40.707 回答