【问题标题】:UIButton only setimage on UIControlStateNormalUIButton 仅在 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] 相同

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

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

【问题讨论】:

    标签: ios uibutton


    【解决方案1】:

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

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

    您需要注意的另一件事是状态 UIControlStateSelectedUIControlStateSelected | 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 在他的回答中解释了原因。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 2010-11-30
      相关资源
      最近更新 更多