将观察者添加到标签

时间:2014-05-01 13:07:48

标签: ios ios7 nsnotificationcenter

我希望收到有关标签文字更改的通知。

我在班级A和班级B中有一个标签。我正在改变该标签的价值,并根据我想在课程A中进行更改。

我想用NSObserver执行此操作。我尝试了很多SO链接,但我无法使其工作。谁能解释一下这个?

类似的SO链接:Detect Change in UILabel Text

1 个答案:

答案 0 :(得分:3)

您可以使用键值观察

键值观察是一种机制,可以在另一个对象的属性发生变化时直接通知对象。

但是,通常 KVO 不适用于UIKit个类。这就是Apple所说的:

  

虽然UIKit框架的类通常不支持   KVO,你仍然可以在你的自定义对象中实现它   应用程序,包括自定义视图 - Cocoa Core Competencies

最好的方法是创建自定义UILabel类并覆盖setText:方法。在实施中发布通知。

实施例

  1. 创建自定义UILabel类并定义通知名称。

    extern NSString *const MyLabelTextDidChangeNotification;
    
    @interface MyLabel : UILabel
    @end
    
  2. 覆盖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
    
  3. 使用setAttributedText:方法执行相同操作。

  4. 想要收到有关文本更改通知的对象应注册新通知

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(handleNotification:)
                                                 name:MyLabelTextDidChangeNotification
                                               object:nil];
    
  5. 祝你好运!