在运行时无法更改和自定义自定义 UITableViewCell 中的 UIButtons 的标题
Posted
技术标签:
【中文标题】在运行时无法更改和自定义自定义 UITableViewCell 中的 UIButtons 的标题【英文标题】:Not able to change and customize the title of UIButtons in a custom UITableViewCell during runtime 【发布时间】:2013-11-16 00:55:38 【问题描述】:我创建了一个自定义UITableViewCell
,其中包含四个UIButtons
。这些按钮的文本(titleLabel)是根据单元格的索引生成的。我正在使用以下内容自定义tableView:cellForRowAtIndexPath
中的每个按钮(答案1 是UIButton
)...
NSLog(@"Default button title: %@", myCustomCell.answer1.titleLabel.text);
[myCustomCell.answer1 setTitle:selectedQuestion.possibleAnswers[0] forState:UIControlStateNormal];
myCustomCell.answer1.titleLabel.textAlignment = NSTextAlignmentCenter;
NSLog(@"New button title: %@", myCustomCell.answer1.titleLabel.text);
[myCustomCell.answer1 adjustTitleFontSizeToFit];
预期输出:
Default button title: Answer 1
New button title: *ANSWER TEXT HERE*
但是实际的控制台输出显示字符串没有更新,但在设备上它是正确的字符串。但是,它有时会更改标题,但仅更改我创建的第一个按钮(我在每个按钮上使用相同的代码)。
我使用adjustTitleFontSizeToFit
方法创建了一个UIButton
类别,因为如果字符串不适合按钮框架,我希望每个按钮的titleLabel
自动调整字体大小。在此示例之外测试此方法时,它按预期工作。问题似乎是按钮的titleLabel
没有及时更新,以便adjustTitleFontSizeToFit
完成它的工作。换句话说,当在按钮上调用adjustTitleFontSizeToFit
时,它所操作的字符串是我创建按钮时xib
中的默认字符串。 setTitle:forState:
之后的 NSLog
也显示了这一点。
奇怪的行为(无论如何对我来说很奇怪)是在应用程序中,它确实改变了标题。我只需要能够在单元格构建期间处理titleLabel
,这样我就可以调整按钮标签的大小。
非常感谢任何想法,如果需要,我可以提供更多信息。
【问题讨论】:
您看到了什么 UI 问题?adjustTitleFontSizeToFit
应该在渲染时起作用,而不是在调用时。
【参考方案1】:
与许多 UI 错误一样,问题是我的 xib/storyboard 中遗漏了一个简单的复选标记。我将第一个按钮设置为“自定义”按钮类型,其余按钮设置为系统“按钮”类型。
赠品应该是它适用于一个按钮,但不适用于其他按钮。但是如果有人遇到类似的问题,我会留下这个。
如果有人需要调整 UIButton 的字体大小,这里是我使用的类别方法...
- (void)adjustTitleFontSizeToFit
UIFont *font = self.titleLabel.font;
CGSize size = self.frame.size;
for (CGFloat maxSize = self.titleLabel.font.pointSize; maxSize >= self.titleLabel.minimumScaleFactor * self.titleLabel.font.pointSize; maxSize -= 1.f)
font = [font fontWithSize:maxSize];
CGSize constraintSize = CGSizeMake(size.width, MAXFLOAT);
CGSize labelSize = [self.titleLabel.text sizeWithFont:font constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping];
if(labelSize.height <= size.height)
self.titleLabel.font = font;
[self setNeedsLayout];
break;
// set the font to the minimum size anyway
self.titleLabel.font = font;
[self setNeedsLayout];
【讨论】:
以上是关于在运行时无法更改和自定义自定义 UITableViewCell 中的 UIButtons 的标题的主要内容,如果未能解决你的问题,请参考以下文章