2

我有一个简单的 UIButton 问题

仅当按钮位于 UIControlStateNormal 中时,我才需要在按钮上显示图像,并且如果单击它则不显示它。

这是我的代码:

[cardButton setImage:[UIImage imageNamed:@"cardBack.png"] forState:UIControlStateNormal];

当一个按钮被点击时,我会改变它的状态:

cardButton.selected = card.isFaceUp;

现在的问题是,即使按钮的状态切换到 UIControlStateSelected,图像仍然存在......

我检查了 imageForState 方法,惊讶地发现它[cardButton imageForState:UIControlStateSelected]返回的值与[cardButton imageForState:UIControlStateNormal]

我从来没有在任何地方设置选定状态的图像值,也不知道这里发生了什么。

需要你的帮助!非常感谢!

4

3 回答 3

6

UIButton如果没有明确设置其他状态,并且(令人讨厌)即使您明确尝试将这些属性设置为其他状态,则实例使用其他状态的“正常”状态标题、图像和背景图像nil。我通常做的是创建一个像素清晰的图像并将其用于其他状态,例如:

[cardButton setImage:[UIImage imageNamed:@"clear"] forState:UIControlStateSelected]

您需要注意的另一件事是状态UIControlStateSelectedUIControlStateSelected | UIControlStateHighlighted实际上是不同的,因此如果您不希望在用户点击并按住当前选定的按钮时显示正常的状态艺术品,您还需要设置:

[cardButton setImage:[UIImage imageNamed:@"clear"] forState:UIControlStateSelected | UIControlStateHighlighted]
于 2013-06-28T21:15:55.520 回答
1

这是一个不使用 1 像素图像的解决方法:

    if (!cardButton.isSelected && cardButton.isEnabled){
        [cardButton setImage:[UIImage imageNamed:@"cardback.jpg"] forState:UIControlStateNormal];
    }else{
        [cardButton setImage:nil forState:UIControlStateNormal];
    }

我想如果你正在尝试创建一个需要在应用商店中发布的应用,你会想要更优雅的 1 像素透明图像解决方案。

于 2013-08-17T13:33:59.070 回答
0

尝试以下代码行?

[cardButton setImage:nil forState:UIControlStateSelected];
于 2013-06-28T21:26:25.113 回答