UIButton只在UIControlStateNormal上有setimage

时间:2013-06-28 20:36:56

标签: ios uibutton

我有一个简单的UIButton问题

我只需要在按钮上显示一个图像,如果它在UIControlStateNormal中,如果点击它就不显示它。

这是我的代码:

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

单击按钮时,我将更改其状态:

cardButton.selected = card.isFaceUp;

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

我检查了imageForState方法,并惊奇地发现[cardButton imageForState:UIControlStateSelected]返回与[cardButton imageForState:UIControlStateNormal]相同的值

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

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

3 个答案:

答案 0 :(得分:6)

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

nil

您必须注意的另一件事是状态[cardButton setImage:[UIImage imageNamed:@"clear"] forState:UIControlStateSelected] UIControlStateSelected实际上是截然不同的,所以如果您不希望在用户点击时显示您的正常状态图稿并保存当前选中的按钮,您还需要设置:

UIControlStateSelected | UIControlStateHighlighted

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

尝试以下代码行吗?

[cardButton setImage:nil forState:UIControlStateSelected];