UIButton 仅在 UIControlStateNormal 上设置图像
Posted
技术标签:
【中文标题】UIButton 仅在 UIControlStateNormal 上设置图像【英文标题】:UIButton only setimage on UIControlStateNormal 【发布时间】:2013-06-28 20:36:55 【问题描述】:我有一个简单的 UIButton 问题
只有当按钮处于 UIControlStateNormal 时,我才需要在按钮上显示图像,并且如果我单击它则不显示它。
这是我的代码:
[cardButton setImage:[UIImage imageNamed:@"cardBack.png"] forState:UIControlStateNormal];
当一个按钮被点击时,我会改变它的状态:
cardButton.selected = card.isFaceUp;
现在的问题是,即使按钮的状态切换到 UIControlStateSelected,图像仍然存在...
我检查了 imageForState 方法,意外地发现[cardButton imageForState:UIControlStateSelected]
返回的值与[cardButton imageForState:UIControlStateNormal]
相同
我从未在任何地方设置选定状态的图像值,也不知道这里发生了什么。
需要你的帮助!非常感谢!
【问题讨论】:
【参考方案1】:UIButton
的实例使用其他状态的“正常”状态标题、图像和背景图像,如果没有明确设置其他状态,并且(令人讨厌)即使您明确尝试将这些属性设置为 nil
为其他州。我通常做的是创建一个像素清晰的图像并将其用于其他状态,例如:
[cardButton setImage:[UIImage imageNamed:@"clear"] forState:UIControlStateSelected]
您需要注意的另一件事是状态 UIControlStateSelected
和 UIControlStateSelected | UIControlStateHighlighted
实际上是不同的,因此如果您不希望在用户点击并按住 当前选中的按钮,还需要设置:
[cardButton setImage:[UIImage imageNamed:@"clear"] forState:UIControlStateSelected | UIControlStateHighlighted]
【讨论】:
谢谢!这对我有用。指出设置 nil 对其他州不起作用。 但是,我仍然想知道是否有更通用的方法来实现这一点。否则,如果我只需要将我的第一张图像用于正常状态,我需要为所有其他状态设置清晰图像。 @zeroliu:我通常至少在正常和高亮状态下都有真实的艺术品(不是清晰的像素黑客东西)。并且其他状态标志(选择、禁用和“应用程序”)的使用频率较低,所以我只需要使用几次清除像素技巧。不过这很烦人。【参考方案2】:这是一种不使用 1 像素图像的解决方法:
if (!cardButton.isSelected && cardButton.isEnabled)
[cardButton setImage:[UIImage imageNamed:@"cardback.jpg"] forState:UIControlStateNormal];
else
[cardButton setImage:nil forState:UIControlStateNormal];
我想如果您尝试创建一个需要在应用商店中发布的应用,您会想要更优雅的 1 像素透明图像解决方案。
【讨论】:
【参考方案3】:试试下面的代码行?
[cardButton setImage:nil forState:UIControlStateSelected];
【讨论】:
Aaron 在他的回答中解释了原因。以上是关于UIButton 仅在 UIControlStateNormal 上设置图像的主要内容,如果未能解决你的问题,请参考以下文章
UIButton - 仅在没有待处理事件时调用 Release?
UIbutton 仅在 longPress 上看起来被点击(突出显示)?