iphone - 如何监听 UIButton 状态变化?

标签 iphone objective-c cocoa-touch uibutton key-value-observing

我正在使用通用功能扩展 UIButton,以根据显示的标题更改某些外观属性。

为此,我需要检测并响应“state”属性的变化。如果用户为不同的状态设置不同的标题,我会确保正确调整外观。我假设我需要使用如下所示的某种 KVO:

[self addObserver:self 
       forKeyPath:@"state" 
          options:NSKeyValueObservingOptionNew 
          context:nil];

但这似乎并没有触发@"state"或@"currentTitle"的 observeValueForKeyPath:... 方法。我认为这是因为 UIButton 没有为这些属性实现 KVO 模式。

我不想只听点击。这些事件会导致状态发生变化,但并不是唯一的潜在原因。

有谁知道监听和响应 UIButton 状态变化的方法吗?

谢谢


更新

由于我在过去几年中学到了一些东西,所以只是一个笔记 ;)。

从那以后,我与一些知道的 Apple 人员交谈过,KVO 不能在状态属性上工作的原因是 UIKit 的 NONE 保证是 KVO 兼容的。认为这值得在这里重复——如果您正在尝试监听 UIKit 框架类的任何属性,请注意它可能有效但不受官方支持,并且可能会在不同的 iOS 版本上中断。

最佳答案

好吧,我想出了一个可行的解决方案。可以监听按钮的titleLabel的text属性。

[self.titleLabel addObserver:self 
                  forKeyPath:@"text" 
                     options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld 
                     context:nil];

似乎每次更改都会触发两次,因此您应该检查以确保传递的更改字典中的@"old"和@"new"的值不同。

注意:不要直接使用@"old"和@"new"。常量分别为 NSKeyValueChangeOldKey 和 NSKeyValueChangeNewKey。

关于iphone - 如何监听 UIButton 状态变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2503721/

相关文章:

iphone - 在将 UIImage 叠加到另一个 UIImage 上时需要一些帮助吗?

ios - 使用 popToRootViewController 传递数据

ios - 为什么 KVO 不能在 UIView 子类上工作?

iPhone应用程序: How to fill an image with empty areas with coregraphics?

iphone - 在 iPhone OS 中访问地址簿

iphone - 水平翻转动画期间的背景颜色

iphone - 如何在 UITableView 的开头插入 UITableViewCell

iphone - 在 iOS 中从 Google 的 GEOLocation 获取 ZERO_RESULTS 响应。

objective-c - 获取当前的 iCloud 同步状态

iOS YouTube "No Filters Selected"