我希望收到有关标签文字更改的通知。
我在班级A
和班级B
中有一个标签。我正在改变该标签的价值,并根据我想在课程A
中进行更改。
我想用NSObserver
执行此操作。我尝试了很多SO链接,但我无法使其工作。谁能解释一下这个?
类似的SO链接:Detect Change in UILabel Text
答案 0 :(得分:3)
您可以使用键值观察。
键值观察是一种机制,可以在另一个对象的属性发生变化时直接通知对象。
但是,通常 KVO 不适用于UIKit
个类。这就是Apple所说的:
虽然UIKit框架的类通常不支持 KVO,你仍然可以在你的自定义对象中实现它 应用程序,包括自定义视图 - Cocoa Core Competencies
最好的方法是创建自定义UILabel
类并覆盖setText:
方法。在实施中发布通知。
创建自定义UILabel类并定义通知名称。
extern NSString *const MyLabelTextDidChangeNotification;
@interface MyLabel : UILabel
@end
覆盖setText:
方法,并在文字更改时发布通知。
NSString *const MyLabelTextDidChangeNotification = @"MyLabelTextDidChangeNotification";
@implementation MyLabel
- (void)setText:(NSString *)newText
{
if (![self.text isEqualToString:newText])
{
self.text = newText;
[[NSNotificationCenter defaultCenter] postNotificationName:MyLabelTextDidChangeNotification
object:newText];
}
}
@end
使用setAttributedText:
方法执行相同操作。
想要收到有关文本更改通知的对象应注册新通知
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleNotification:)
name:MyLabelTextDidChangeNotification
object:nil];
祝你好运!