选择时避免 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 中找到您的按钮,并将其 TypeSystem 更改为 Custom。这应该消除所选状态的放大和反转图像的效果。 打开您的资产文件,其中定义了正常和选定状态的图像。将普通图像的Render As 设置为Original Image,将选定图像的Template Image 设置为。这应该会导致应用的默认色调仅应用于选定的状态。

【讨论】:

该死,我在这上面花了很长时间,没有考虑按钮类型,这应该是公认的答案!【参考方案2】:

我会尝试跟踪属性中的状态,然后使用其他属性返回当前状态的正确图像。然后,您可以在 viewDidLoadviewDidAppear 上设置这些。

我不知道你的具体情况,所以这里是一个例子。

例子:

@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 反转颜色的主要内容,如果未能解决你的问题,请参考以下文章

选择和突出显示时的 UIButton 标题颜色

选择时无法设置 UIButton 的背景颜色?

UIButton自定义按钮不会在选择时更改字体颜色

目标 - 突出显示/选择C按钮时,突出显示/选择背景颜色和字体颜色

用户单击时如何禁用 UIButton 的突出显示

带有分隔线的Objective C UIButton并在选择时更改文本颜色