0

假设我希望在它触发的某个方法中接近某个 UIControl——我可以使用“sender”向该方法发送一个指向 UIControl 的指针。但是,由于某种原因,我不能直接访问发件人的属性,而必须使用 setX:forState: 方法。如果我直接接近属性,我不会收到错误或警告;它根本什么都不做......

这是一个例子:

h. file...
@interface MYViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIButton *dButton; //connected to a UIButton in IB
-(IBAction)dButtonClick:(UIButton*)sender; //connected to the same UIButton in IB
@end

然后...

m. file...
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.dButton.titleLabel.textColor = [UIColor greenColor]; //this is working...
}
-(IBAction)dButtonClick:(UIButton*)sender 
{
    sender.titleLabel.textColor = [UIColor redColor]; //this is not working...
    self.dButton.titleLabel.textColor = [UIColor redColor]; //this is also not working...
    [sender setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; //only this is working. 
    //But why?!?!?
}

我试图搜索有关这些项目工作方式的一些信息,但找不到任何足够清楚地解释其背后逻辑的信息。

任何帮助都会......嗯......有帮助......

4

1 回答 1

2

这个:

sender.titleLabel.textColor

和这个:

[sender setTitleColor:[UIColor redColor] forState:UIControlStateNormal];

不同不仅因为点符号,还因为状态。每个状态的按钮都有不同的颜色,因此任何直接设置的颜色都将被状态颜色覆盖。

这一行:

self.dButton.titleLabel.textColor = [UIColor redColor];

可能是同样的问题,或者您可能只是没有连接插座。

于 2013-08-08T08:42:36.510 回答