自定义 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 自定义类型不起作用
针对 iPhone 4s 和 5 上 xcode 5 中的背景图像问题的自定义 UIButton 对齐 - 添加约束不能解决问题