自定义 UIButton 背景图像在点击之前不会出现

Posted

技术标签:

【中文标题】自定义 UIButton 背景图像在点击之前不会出现【英文标题】:Custom UIButton background image not appearing until tapped 【发布时间】:2013-04-15 19:45:33 【问题描述】:

在我的应用程序中,如果您点击某个区域,则会出现一个带有 UIButtons 的 UIPopoverController,这些按钮在单击时执行某些任务。 UIButtons(称为 CableDisconnectButton)是 UIButton 的子类,因此我可以向它们添加两个附加属性。我还添加了 UILabels 来查看按钮

但是,按钮的背景图像是不可见的,或者直到我点击屏幕某处时才会出现。 UIlabels 显示得很好,但不是按钮。它可以是点击 UIPopoverController 或屏幕上的任何其他位置。一旦我第一次点击该按钮,按钮就会一直存在,直到应用程序关闭。所以,这只发生在启动之后,直到我第一次打开 UIPopover。在打开弹出框之前我点击了很多次。

按钮的功能和其他一切都运行良好,但背景图像在第一次启动时被隐藏了,我不知道为什么。

这是我创建按钮和 UILabel 的方法:

    //create custom button
CableDisconnectButton *removeConnectionButton = [CableDisconnectButton buttonWithType:UIButtonTypeCustom];
removeConnectionButton.frame = CGRectMake(x, y, 190, 80);
removeConnectionButton.backgroundColor = [UIColor clearColor];
[removeConnectionButton setBackgroundImage:[UIImage imageNamed:@"images/cable_disconnect_button.png"] forState:UIControlStateNormal];
[removeConnectionButton setBackgroundImage:[UIImage imageNamed:@"images/cable_disconnect_button_over.png"] forState:UIControlStateHighlighted];

//set input and output jacks to button properties
removeConnectionButton.inputJack = inputJack;
removeConnectionButton.outputJack = self.outputJackView;

//add action to button
[removeConnectionButton addTarget:self action:@selector(removeConnectionButtonTarget:) forControlEvents:UIControlEventTouchUpInside];

//create label for output
UILabel *outputConnectionLabel = [[UILabel alloc] initWithFrame:CGRectMake(x+18, y+5, 180, 22)];
outputConnectionLabel.backgroundColor = [UIColor clearColor];
outputConnectionLabel.textColor = [UIColor whiteColor];
outputConnectionLabel.text = self.outputJackView.jackDisplayName;
outputConnectionLabel.font = [UIFont systemFontOfSize:16];

//add subviews
[self addSubview:removeConnectionButton];
[self addSubview:outputConnectionLabel];

我尝试添加一个常规的、非自定义的 UIButton,它无需点击即可显示。我怀疑它可能与子类 UIButton 有关,但我不确定为什么。添加到 UIButton 的额外属性是对功能至关重要且不能省略的字符串。

【问题讨论】:

对于imageNamed:,您不需要images/ 部分。例如[UIImage imageNamed:@"cable_disconnect_button.png"] 我所有的图片都在一个名为 images 的文件夹中。 imageNamed: 会解决这个问题。无需添加图像/ 。此外,您似乎在 Button 框架顶部添加了 connectionLabel,并在 x 轴上稍微调整了 18 像素,在 Y 轴上调整了 5 像素。 images文件夹不是XCode中创建的文件夹,而是项目文件夹中的文件夹。我删除了“图像/”,背景没有出现。调用方法时使用 x 和 y 变量。像这样- (void)createRemoveButtonWithInput:(JackView *)inputJack withX:(CGFloat)x withY:(CGFloat)y 此外,经过进一步测试,具有自定义按钮类型的常规 UIButton 似乎表现出相同的行为。 【参考方案1】:

在把我的头从桌子上敲了好几天之后,我遇到了“清理构建文件夹”选项。我已经多次清理项目,但不知道“清理构建文件夹”。要执行此操作,只需按住 Option 键,从菜单中单击 Product 并选择 Clean Build Folder。

所以,如果您的应用程序没有按照应有的方式运行并且根本没有意义,请尝试此操作。

【讨论】:

以上是关于自定义 UIButton 背景图像在点击之前不会出现的主要内容,如果未能解决你的问题,请参考以下文章

弹出视图时不恢复自定义导航栏背景

界面生成器 UIButton 自定义背景图像在模拟器/设备上不起作用

自定义 UIButton 不会更改其图像

具有背景颜色和透明前景图像的 UIButton 自定义类型不起作用

针对 iPhone 4s 和 5 上 xcode 5 中的背景图像问题的自定义 UIButton 对齐 - 添加约束不能解决问题

使用普通/高亮图像创建自定义 UIButton