【问题标题】:how to know if UIButton titlelable.text changed如何知道 UIButton titlelable.text 是否改变
【发布时间】:2014-03-10 08:31:42
【问题描述】:

我只想知道当按钮标题更改时如何触发某些功能? 我尝试使用此命令,但没有任何效果:

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

【问题讨论】:

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


【解决方案1】:

你可以在你的视图控制器中使用一个观察者,它有一个按钮的出口:

  1. 首先添加观察者(以 viewDidLoad 为例)

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

    - (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"];
    

【讨论】:

  • 非常感谢它运行良好,但为什么观察者调用两次?
  • @user2978353 尝试在“observeValueForKeyPath”方法中设置断点,然后您可以自己查看设置按钮标题的代码。可能,该值是从苹果代码中设置的(因为您可能在 .xib 文件中的按钮上设置了一个文本,并且从您的代码中设置了一次)
【解决方案2】:

使用KVO(即Key-Value-Observer)收听UIButton'stitleLabel的text属性。 试试下面的代码

  [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
              }

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-04-09
      • 2010-12-05
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-23
      • 1970-01-01
      相关资源
      最近更新 更多