如何知道UIButton titlelable.text是否改变了

时间:2014-03-10 08:31:43

标签: ios objective-c iphone uibutton key-value-observing

我只是想知道如何在按钮标题更改时触发某些功能? 我试图使用这个命令,但没有任何作用:

[button addTarget:self 
           action:@selector(function:) 
       forControl:UIControlEventValueChange];

3 个答案:

答案 0 :(得分:7)

您可以在viewcontroller中使用具有按钮插座的观察者:

  1. 首先添加观察者(例如,在viewDidLoad中)

    [self.button addObserver:self 
                  forKeyPath:@"titleLabel.text" 
                     options:NSKeyValueObservingOptionNew 
                     context:NULL];
    
  2. 覆盖viewcontroller上的默认观察者方法

    - (void)observeValueForKeyPath:(NSString *)keyPath 
                          ofObject:(id)object 
                            change:(NSDictionary *)change 
                           context:(void *)context {
    
        if ([keyPath isEqualToString:@"titleLabel.text"]) {
            // Value changed
            UIButton *button = object;
            NSString *title = button.titleLabel.text;
        }
    }
    
  3. 在dealloc函数

    中删除自己作为观察者
    [self.button removeObserver:self forKeyPath:@"titleLabel.text"];
    

答案 1 :(得分:1)

使用KVO(即Key-Value-Observer)收听UIButton's titleLabel的文字属性。 尝试以下代码

  [button.titleLabel addObserver:self 
                      forKeyPath:@"text" 
                         options: NSKeyValueChangeOldKey | NSKeyValueChangeNewKey 
                         context:nil];

然后为它实现观察者

      -(void)addObserver:(NSObject *)observer
              forKeyPath:(NSString *)keyPath
                 options:(NSKeyValueObservingOptions)options
                 context:(void *)context{

                 // your code
              }

答案 2 :(得分:0)

另一个逻辑是:在 .h 文件中声明UIButton及其属性并使用 .m 文件中的代码

if([button.titleLabel.text isEqualToString:updatedButtonTitleString])
{
  // title is same
}
else
{
  // title is updated
}