无法更改 UITableViewCell 内的 UIButton 图像
Posted
技术标签:
【中文标题】无法更改 UITableViewCell 内的 UIButton 图像【英文标题】:Unable to change UIButton image inside UITableViewCell 【发布时间】:2018-05-18 07:04:27 【问题描述】:我在 xib 中创建了一个自定义 UITableViewCell
,并为其分配了一个自己的类文件。我已将背景图像分配给 IB 中此自定义单元格内的 UIButton
。在我的ViewController
中,我有一个使用此单元格的UITableView
,我有以下代码。
_yesNoCell = (YesNoCell *)[tableView dequeueReusableCellWithIdentifier:@"YesNoCell"];
// Below code is not working
[_yesNoCell.btnYes setImage:[UIImage imageNamed:@"action_selected"] forState: UIControlStateHighlighted];
[_yesNoCell.btnYes addTarget:self action:@selector(btnYesTap:) forControlEvents:UIControlEventTouchUpInside];
一切正常,btnYesTap
方法按预期调用。 IB中设置的背景图像显示出来,但是,我想要的是在按下按钮(未释放)时设置不同的图像,即UIControlStateHighlighted
。上面的代码不起作用。
我什至尝试向按钮添加一个动作:
[_yesNoCell.btnYes addTarget:self action:@selector(changeImage:) forControlEvents:UIControlEventTouchDown];
并在changeImage
方法中更改图像,但没有成功。
我在 SO 上提到过类似的帖子,但似乎都没有解决方案。参考链接:OneTwoThree
非常感谢任何帮助。
【问题讨论】:
您正在将按钮图像更改为突出显示状态,我认为您应该将图像设置为正常状态,例如 [_yesNoCell.btnYes setImage:[UIImage imageNamed:@"action_selected"] forState: UIControlStateNormal]; @AbdulRehmanWarraich :这就是我想要的,我想在按下按钮时(尚未释放)显示不同的图像。 我测试了上面的代码,它对我有用 请确认您的图片不为空 然后按住按钮几秒钟 【参考方案1】:实际上,您将按钮图像设置为突出显示状态,但您的按钮处于正常(默认)状态。所以改变你的按钮状态,如下所示。
斯威夫特 4
let myImg = UIImage(named: "your-img-name") // your image
myButton.setImage(myImg, for: .highlighted) // set button image for state
myButton.isHighlighted = true // change button state
目标-C
UIImage *myImg = [UIImage imageNamed:@"your-img-name"];
[myButton setImage:myImg forState:UIControlStateHighlighted];
[myButton setHighlighted:true];
【讨论】:
【参考方案2】:您可以使用UIControlStateSelected | UIControlStateHighlighted
这样做
[_yesNoCell.btnYes setImage:[UIImage imageNamed:@"action_selected"] forState:UIControlStateSelected | UIControlStateHighlighted];
【讨论】:
以上是关于无法更改 UITableViewCell 内的 UIButton 图像的主要内容,如果未能解决你的问题,请参考以下文章
更改 UITableViewCell 内的 UIbutton 颜色
更改 UITableViewCell 内的 UIView 高度
UITableViewCell 内的 UIScrollView - 水平滚动
UITableViewCell 内的 UIStackView 在 AutoLayout 上无法正确调整