UIButton - 默认状态下的图像,选定状态下的标题

时间:2013-03-08 21:45:29

标签: ios objective-c image uibutton title

所以我正在通过iTunes U完成2013年冬季斯坦福iOS / Objective-C课程的第二次任务,最后一部分让我发疯。

这是一款卡片匹配游戏。每张卡在视图中表示为UIButton。当卡片对象面朝上时,UIButton处于选中状态,当卡片面朝下时,UIButton处于默认状态。找到匹配项后,也可以禁用卡片。

作业要求在卡片背面放置图像。换句话说,每个UIButton都需要在处于默认状态时显示图像,但是当它处于选中或禁用状态时,它必须是title属性。

看起来很简单......

首先我在GUI(故事板)中尝试了这一点,将背景图像设置为我的图像,然后确保所选状态和禁用状态都没有图像。这导致图像显示,但随后标题文本显示在图像上。一些搜索找到了原因:除非明确告知,所以UIButton默认所有其他UIControlStates为UIControlStateNormal。

现在我一直在努力让这个以编程方式工作,但仍然没有运气。所有作为卡的UIButton都在IBOutletCollection中,这是一个NSArray(cardButtons)。在viewDidLoad函数中,我有一个遍历所有按钮的for循环:

UIImage *cardBack = [UIImage makeSomeImage...];
for (UIButton *oneButton in cardButtons) {
[oneButton setBackgroundImage:cardBack forState:UIControlStateNormal];
[oneButton setBackgroundImage:nil forState:UIControlStateSelected];
}

哪个仍然给我同样的问题。它绝对可以成功地将图像设置为默认状态,但是当我单击模拟器中的按钮时,图像会保留,而标题只显示在它上面。

在GUI和编程方面,我可以得到一个不同的图像,以显示处于选定和禁用状态。我所要做的就是添加:

[oneButton setBackgroundImage:anotherImage forState:UIControlStateSelected];

循环播放,所有按钮在选中时显示其他图像。

我不能做什么,以及让我疯狂的是,试图在选择时没有背景图像,以便UIButton只显示标题......

编辑:

虽然不是一个理想的解决方案(我认为在UIButton中使用imageView属性可能会有所改变,但我不确定),我已经想出了一种有点敏感的方法来实现这个功能。

首先,我将我正在使用的UIImage用于名为cardBackImage的类属性中。

然后,在每次对模型进行更改时循环遍历所有卡按钮的updateUI函数中,我添加了以下代码行:

[cardButton setBackgroundImage:(oneCard.isFaceUp ? nil : self.cardBackImage) forState:UIControlStateNormal];

因此,每次卡片对象被“翻转”时,UIButton必须将UIImage加载或卸载到其实例变量中。 Bleh ...就像我说的那样,并不理想,但它确实有效。

4 个答案:

答案 0 :(得分:1)

我知道很久以前就发布了这个问题,但是我遇到了同样的问题,我发现了this answer到另一个帖子。

答案 1 :(得分:0)

为什么不尝试使用图像属性而不是按钮的backgroundImage?它会在图像存在时隐藏标题文本

UIButton *button;
[button setImage:[UIImage imageNamed:@"someImage"] forState:UIControlStateNormal];

答案 2 :(得分:0)

我建议在按钮改变状态即触摸时简单地改变图像。我会写一个这样的方法:

- (void)swapBackgroundImagesOfButton:(UIButton *)button
{
    UIImage *normalImage = [button imageForState:UIControlStateNormal];
    UIImage *selectedImage = [button imageForState:UIControlStateSelected];

    [button setImage:selectedImage forState:UIControlStateNormal];
    [button setImage:normalImage forState:UIControlStateSelected];
}

然后,当您要显示或隐藏图像时,您只需调用该方法,而不是设置按钮的selected状态。

答案 3 :(得分:0)

这是一个更简单的解决方案,可让您仅使用情节提要根据状态设置UIButton图像和标题。 在属性检查器中,您将按钮图像设置为默认状态,然后为所选状态设置按钮标题,并为图像添加一个空白字符,如您所见

enter image description here

然后您可以通过self.button.isSelected = true以编程方式更改状态,并查看图像变成文本