Objective c 拦截UIButton的已知属性的setter并设置其值

Objective c 拦截UIButton的已知属性的setter并设置其值,objective-c,iphone,properties,Objective C,Iphone,Properties,假设我正在为一个类创建一个属性,比如 @property (nonatomic, strong) NSString *name; 如果我要为此创建一个setter,我会使用 - (void)setName:(NSString *)name { _name = name; // ... bla bla... } 注意第一行吗?我正在为该属性的内部变量指定新名称 现在,假设我想以编程方式更改UIButton的背景色,如果该按钮处于选定状态 所以,我想我可以截取所选属性的setter,如下

假设我正在为一个类创建一个属性,比如

@property (nonatomic, strong) NSString *name;
如果我要为此创建一个setter,我会使用

- (void)setName:(NSString *)name {
  _name = name;
  // ... bla bla...
}
注意第一行吗?我正在为该属性的内部变量指定新名称

现在,假设我想以编程方式更改UIButton的背景色,如果该按钮处于选定状态

所以,我想我可以截取所选属性的setter,如下所示:

- (void)setSelected:(BOOL)selected {
  self.backgroundColor = selected ? [UIColor redColor] : [UIColor darkGrayColor];
}
但是没有明显的方法来设置该属性的内部值。它将不接受_selected=selected,如果我使用self.selected=selected,我将创建一个调用setter无限次的设置崩溃条件


如何操作?

要设置继承属性,请调用super:

[super setSelected:selected];


B R I L I A T!
super.selected = selected;