UITableViewCell 中的自定义标签问题
Posted
技术标签:
【中文标题】UITableViewCell 中的自定义标签问题【英文标题】:Problem with custom label in UITableViewCell 【发布时间】:2011-02-11 09:45:05 【问题描述】:我有 UITableViewController。在cellForRowAtIndexPath
方法中,我为标签添加了自定义设置:
UILabel *lblMainLabel = [[UILabel alloc]initWithFrame:CGRectMake(50, 9, 150, 25)];
lblMainLabel.text = c.Name;
lblMainLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:20];
lblMainLabel.backgroundColor = [UIColor clearColor];
lblMainLabel.textColor = [UIColor whiteColor];
[cell.contentView addSubview:lblMainLabel];
[lblMainLabel release];
但是当我在表格中向上或向下滚动时,它总是将此标签添加到我错过的之前的顶部?
【问题讨论】:
【参考方案1】:您应该在创建单元格时只创建一次 UILabel。
您的代码应如下所示:
if (cell == nil)
cell = ...
UILabel *lblMainLabel = [[UILabel alloc]initWithFrame:CGRectMake(50, 9, 150, 25)];
lblMainLabel.tag = 42;
lblMainLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:20];
lblMainLabel.backgroundColor = [UIColor clearColor];
lblMainLabel.textColor = [UIColor whiteColor];
[cell.contentView addSubview:lblMainLabel];
[lblMainLabel release];
UILabel *lblMainLabel = [cell viewWithTag:42];
lblMainLabel.text = c.Name;
【讨论】:
为什么标签应该是数字42?还是真的不重要? 标签当然是任意数字。但是在分配标签和检索带有标签的视图时,您必须使用相同的编号。【参考方案2】:是的,fluchtpunkt,你是对的。 每次tableview滚动时都会触发cellForRowAtIndexPath,它将重新加载数据。
if (cell == nil)
一旦单元被分配就会被解雇。否则内存也会增加。
【讨论】:
如果您同意某个答案,请点赞,或许还可以添加评论。这并不是真正的“答案”。以上是关于UITableViewCell 中的自定义标签问题的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Interface Builder 中的自定义 UITableViewCell?
在 xib 中带有可选 UIImageView 的自定义 UITableViewCell
带有标签和 UISlider 的自定义 UITableViewCell 在 ios 7 的 6 次崩溃中运行良好。 ?? UITableViewCellScrollView?