UIButton 标题文本颜色更改

UIButton title text color change

提问人:tesla 提问时间:4/21/2022 更新时间:4/22/2022 访问量:977

问:

我在自定义 UIView 中有一个 UIButon。在视图中,我有一个函数,当我想更改 UIView 的外观时会调用该函数。setDisabled:(BOOL)disabled

\\ Method 1
- (void) setDisabled:(BOOL)disabled
{
   myUIButton.titleLabel.textColor = disabled ? [UIColor systemGrayColor] : [UIColor systemBlueColor];
}
\\ Method 2
- (void) setDisabled:(BOOL)disabled
{
   [myUIButton setTitleColor: disabled ? [UIColor systemGrayColor] : [UIColor systemBlueColor] forState: UIControlStateNormal];
}

我已将此 UIView 用于 UITable 视图中的单元格。使用方法 1 时,更改不会立即反映出来(当我滚动浏览 UITableView 时会反映出来),而使用方法 2 时,颜色变化会立即反映出来。在此 apple 文档中,提到不使用方法 1。但是,我找不到原因。任何线索都会有所帮助。

iOS Swift Objective-C UIView UIBuint

评论

0赞 Larme 4/21/2022
确实更喜欢方法 2,但问题是单元格被重用。那么,这种方法在哪里被称为呢?
0赞 Kudos 4/21/2022
很明显,返回 u 颜色而不是设置颜色......要设置按钮标题颜色,您需要使用第二种方法myUIButton.titleLabelmyUIButton setTitleColor
0赞 tesla 4/22/2022
@Larme我在初始化表视图时调用该方法。
0赞 tesla 4/22/2022
@Kudos myUIButton.titleLabel 还会设置颜色,因为在滚动表格视图后,颜色会更改。
1赞 Larme 4/22/2022
单元格是重用的,您需要显示更多代码。

答:

0赞 DonMag 4/22/2022 #1

不要使用“方法 1”......

UIKit 控件(例如)有很多代码可以在“幕后”工作。UIButton

例如,如果按钮的正常颜色为“红色”,突出显示的颜色为“浅灰色”,然后执行:

myUIButton.titleLabel.textColor = [UIColor systemBlueColor];

按钮本身并不知道您这样做了。它仍然将红色作为其正常颜色属性。

一旦 UIKit 更新该按钮(点击或布局更改等),文本颜色将设置回正常颜色属性。