无法在 UITableViewCell 中以编程方式创建的 UIButton 上设置图像
Posted
技术标签:
【中文标题】无法在 UITableViewCell 中以编程方式创建的 UIButton 上设置图像【英文标题】:unable to set image on programmatically created UIButton in UITableViewCell 【发布时间】:2015-03-20 04:51:19 【问题描述】:我有一个在情节提要中定义的自定义 UITableViewCell,并且我正在以编程方式在每个单元格中创建一个 UIButton(在 awakeFromNib 中)。 (重构就这么多。)
我似乎无法在该按钮上设置图像。该图像存在于资产目录中,我可以将其设置在其他(非表格视图)视图中的按钮上。并且该按钮已正确创建并正常工作。但是图像没有出现,当我暂停模拟器并检查分解视图时,侧边栏中的按钮显示“无图像”。我有点难过。
相关代码(来自 UITableViewCell 子类):
- (id)initWithCoder:(NSCoder *)aDecoder
if (self)
self = [super initWithCoder:aDecoder];
viewsDict = [[NSMutableDictionary alloc] initWithCapacity:24]; // for constraints
- (void)awakeFromNib
[super awakeFromNib];
[self.contentView addSubview:self.heartButton]; // instantiates the button (see below)
[[self.heartButton superview] bringSubviewToFront:self.heartButton];
[viewsDict setObject:self.heartButton forKey:@"heartButton"];
[viewsDict setObject:self.containerView forKey:@"containerView"];
// constraints
[self.heartButton addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[heartButton(32)]" options:0 metrics:nil views:viewsDict]];
[self.heartButton addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[heartButton(32)]" options:0 metrics:nil views:viewsDict]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-8-[heartButton]" options:0 metrics:nil views:viewsDict]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[containerView][heartButton]" options:0 metrics:nil views:viewsDict]];
- (UIButton *)heartButton
if (_heartButton == nil)
_heartButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_heartButton setTranslatesAutoresizingMaskIntoConstraints:NO];
SEL selector = NSSelectorFromString(@"heartButtonTapped:");
[_heartButton addTarget:self action:selector forControlEvents:UIControlEventTouchUpInside];
[_heartButton setImage:[UIImage imageNamed:@"heart"] forState:UIControlStateNormal | UIControlStateHighlighted];
return _heartButton;
- (IBAction)heartButtonTapped:(id)sender
NSLog(@"This gets logged when the button gets tapped");
我确信这是非常明显的事情。请让我难堪。
【问题讨论】:
【参考方案1】:问题就在这里。
[_heartButton setImage:[UIImage imageNamed:@"heart"] forState:UIControlStateNormal | UIControlStateHighlighted];
您必须将这两个雕像设置为如下两行。
[_heartButton setImage:[UIImage imageNamed:@"heart"] forState:UIControlStateNormal];
[_heartButton setImage:[UIImage imageNamed:@"heart"] forState:UIControlStateHighlighted];
【讨论】:
以上是关于无法在 UITableViewCell 中以编程方式创建的 UIButton 上设置图像的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中以编程方式在 UITableViewCell 中创建一个 UICollectionView
iOS 在 UITableViewCell 中以编程方式设置 UIImageView 约束在滚动 tableview 时变得混乱
如何在 Swift 中以编程方式更改自定义 UITableViewCell 中按钮的背景颜色?
如何在标准 UITableViewCell 中以编程方式自动布局右侧的自定义 UIButton。
我在自定义 UITableViewCell 中以编程方式设置布局约束时遇到问题
当 UIStepper 在 Swift 4 中以编程方式点击时如何更改 UILabel 的文本,如果它们都在 UITableViewCell 中?