UIButton 图像在正常状态下未显示

Posted

技术标签:

【中文标题】UIButton 图像在正常状态下未显示【英文标题】:UIButton image not showing up on normal state 【发布时间】:2016-08-31 08:25:06 【问题描述】:

我正在尝试使用按钮设置一个复选框,这就是我正在做的事情:

int checkBoxWidth = foregroundHeight / 12.0;
int checkBoxHeight = foregroundHeight / 12.0;
UIButton* checkBox = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, checkBoxWidth, checkBoxHeight)];
//[checkBox setBackgroundImage:[Utility getEmptyCheckBoxOutIcon] forState:UIControlStateNormal];
//[checkBox setBackgroundImage:[Utility getCheckBoxOutIcon] forState:UIControlStateSelected];
[checkBox setImage:[Utility getEmptyCheckBoxOutIcon] forState:UIControlStateNormal];
[checkBox setImage:[Utility getCheckBoxOutIcon] forState:UIControlStateSelected];

checkBox.layer.borderWidth = 1.0;
checkBox.layer.borderColor = [Utility primaryColor].CGColor;
checkBox.layer.cornerRadius = cornerRadius;
[switchView addSubview:checkBox];

但图像仅在我触摸按钮时出现,在任何其他状态下图像都不会出现。有什么遗漏吗?

【问题讨论】:

你在做什么按钮点击,也上传该代码。 如果您的按钮类型是 system ,请将其更改为 custom @sanjeet,我将上传按钮点击代码,但此时应该没关系吧?即使我没有单击按钮,图像也应该显示为正常状态,不是吗?令人费解的是,图像仅在我触摸按钮时才显示,然后它就消失了。再次。 @vishnuvarthan 按钮是 UIButton* checkBox 你能举例说明你的意思吗? UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 【参考方案1】:

您必须更改按钮状态才能更改图像。使用下面的代码来达到你想要的结果。

int checkBoxWidth = foregroundHeight / 12.0;
int checkBoxHeight = foregroundHeight / 12.0;
UIButton* checkBox = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, checkBoxWidth, checkBoxHeight)];
[checkBox setImage:[Utility getEmptyCheckBoxOutIcon] forState:UIControlStateNormal];
[checkBox setImage:[Utility getCheckBoxOutIcon] forState:UIControlStateSelected];
[checkBox setImage:[Utility getCheckBoxOutIcon] forState:UIControlStateHighlighted];
[checkBox setImage:[Utility getCheckBoxOutIcon] forState:UIControlStateSelected | UIControlStateHighlighted];
[checkBox addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
checkBox.layer.borderWidth = 1.0;
checkBox.layer.borderColor = [Utility primaryColor].CGColor;
checkBox.layer.cornerRadius = cornerRadius;
[switchView addSubview:checkBox];

并添加这个目标函数

-(IBAction)buttonClicked:(UIButton*)sender

sender.selected = !sender.selected;


【讨论】:

这不是问题,按钮应该首先出现。问题不在于按钮没有出现。按钮显示,但未应用色调。这样白色按钮和白色背景看起来一样。 checkBox.tintColor = [Utility primaryColor]; 的实际问题不起作用。另一个问题是按钮被添加到子视图中。所以你的第一个答案确实有助于调试:)

以上是关于UIButton 图像在正常状态下未显示的主要内容,如果未能解决你的问题,请参考以下文章

UIButton 选择状态的图像出现在正常状态的图像后面

UIButton 为状态正常设置图像,在不同状态下隐藏该图像

针对不同状态更改 UIButton 的渐变

UIButton 状态

根据状态更改 UIButton 中 ImageView 的 tint 颜色

UIButton 的正常状态和突出显示状态之间的动画转换