我正在寻找一种方法,我可以创建一个方法,只有当任何更改应用于对象时才会调用
例如让我们拿一个标签。我在不同情况下更改此标签的文字。现在我需要我创建一个方法:
- (void)labelTextChangeNotification {
}
每次我的标签文字发生变化时都会调用
我可以使用NSNotification来获取此信息。对于NSNotification
,我们需要发布通知。
我的要求就像Observer一样,观察我的标签文本变化。
有没有办法得到这个??
答案 0 :(得分:1)
您可以尝试使用键值观察(KVO):
[label addObserver:self
forKeyPath:@"text"
options:NSKeyValueObservingOptionNew
| NSKeyValueObservingOptionOld
context:NULL];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"text"]) {
/* etc. */
}
}
当您更改label的值时,将调用此observervalue方法。 同样在更改词典中,您将找到所有细节。
答案 1 :(得分:1)
要接收属性的键值观察通知,需要做三件事:
观察到的类必须符合键值观察 您希望观察的财产。
您必须使用观察对象注册观察对象,
使用方法addObserver:forKeyPath:options:context:
。
观察班必须实施
observeValueForKeyPath:ofObject:change:context:
。
为了获得对属性,观察对象的更改的通知 必须首先通过发送它来注册要观察的对象
addObserver:forKeyPath:options:context:
消息,传递观察者 对象和要观察的属性的关键路径。选项 参数指定提供给观察者的信息 何时发送更改通知。使用选项NSKeyValueObservingOptionOld
指定原始对象值 作为更改字典中的条目提供给观察者。 指定NSKeyValueObservingOptionNew
选项可提供新选项 值作为更改字典中的条目。要同时接收这两个值, 你会按位OR选项常量
从Apple doc
引用因此,当UILabel
的文字发生变化时,您可以使用 KVO : -
[labelName addObserver:self forKeyPath:@"text" options:NSKeyValueObservingOptionNew context:NULL];
只要标签文字发生变化,此方法就会通知: -
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
NSLog(@"the text has been changed");
}