选择时避免 UIButton 反转颜色
Posted
技术标签:
【中文标题】选择时避免 UIButton 反转颜色【英文标题】:Avoid UIButton inverted colours when selected 【发布时间】:2015-06-25 13:47:20 【问题描述】:我有一个 UIButton,其正常状态和选定状态的图像不同。我还需要根据应用的主题更改按钮的色调。
但是当我将按钮设置为选中状态以切换图像时,它会反转其颜色。
- (void)setLike:(BOOL)selected
self.likeButton.selected = selected;
if (selected)
self.likeButton.tintColor = [Theme getTintColor];
else
self.likeButton.tintColor = [Theme getLightColor];
正常状态
实际选择
希望选择
注意:我无法更改图像,因为此代码在应用程序中的其他位置使用不同的选定和未选定图像。
- (void)setLike:(BOOL)selected
if (selected)
[self.likeButton setImage:[UIImage imageNamed:@"Liked"] forState:UIControlStateNormal];
self.likeButton.tintColor = [Theme getTintColor];
else
[self.likeButton setImage:[UIImage imageNamed:@"Like"] forState:UIControlStateNormal];
self.likeButton.tintColor = [Theme getLightBaseColor];
【问题讨论】:
当按钮被选中(或突出显示)时,您无需手动更改图像。通过为 UIControlStateNormal、UIControlStateHighlighted、UIControlStateSelected 设置不同的图像,你可以得到你想要的行为! 我就是这样做的。但是当我将其更改为选中以显示 UIControlStateSelected 图像时,ios 会反转我的颜色。 【参考方案1】:-
在 Interface Builder 中找到您的按钮,并将其
Type
从 System
更改为 Custom
。这应该消除所选状态的放大和反转图像的效果。
打开您的资产文件,其中定义了正常和选定状态的图像。将普通图像的Render As
设置为Original Image
,将选定图像的Template Image
设置为。这应该会导致应用的默认色调仅应用于选定的状态。
【讨论】:
该死,我在这上面花了很长时间,没有考虑按钮类型,这应该是公认的答案!【参考方案2】:我会尝试跟踪属性中的状态,然后使用其他属性返回当前状态的正确图像。然后,您可以在 viewDidLoad
或 viewDidAppear
上设置这些。
我不知道你的具体情况,所以这里是一个例子。
例子:
@property (nonatomic) BOOL isLiked;
...
- (void)viewDidAppear
// likeButton
[self.likeButton setBackgroundImage:[self imageForCurrentState] forState:UIControlStateNormal];
...
- (UIImage)imageForCurrentState
if (isLiked)
return [UIImage imageNamed:@"Liked"];
else
return [UIImage imageNamed:@"Like"];
【讨论】:
以上是关于选择时避免 UIButton 反转颜色的主要内容,如果未能解决你的问题,请参考以下文章