UITableViewCell中有效的长文本绘制

时间:2014-01-16 18:32:47

标签: ios objective-c text uitableview

我正在获取一系列注释,我需要在tableView中显示。

tableView具有用于显示内容的自定义单元格。问题是注释文本的长度可能不同,而且在滚动tableView时我面临着严重的内存增长。

我尝试过显示文字的几种方法:

  • 的UILabel;
  • UITextView的;
  • 在自定义视图上绘图;

除了tableView似乎没有出列我的自定义单元格,因此在滚动tableView时内存不断增长(我的单元格现在有1.5К文本符号)

enter image description here

像这样创建单元格,所以没什么特别的

- (UITableViewCell*)            tableView: (UITableView*) tableView
                    cellForRowAtIndexPath: (NSIndexPath*) indexPath
{
     [tableView registerClass: [CommentCell class] forCellReuseIdentifier: kCommentCellId];

     CommentCell* cell = [tableView dequeueReusableCellWithIdentifier: kCommentCellId
                                                         forIndexPath: indexPath];

     Comment* comment = [self.comments objectAtIndex: indexPath.row];

     cell.comment = comment;

     return cell;
}

评论属性的自定义设置器

- (void) setComment: (Comment*) aComment
{
    self.commentLabel.text = aComment.comment;

    [self setNeedsLayout];
}

在单元格中添加注释标签

- (id) initWithStyle: (UITableViewCellStyle) style
 reuseIdentifier: (NSString*) reuseIdentifier
{
   self = [super initWithStyle: style reuseIdentifier: reuseIdentifier];

   if (self)
   {
        // Comment label
        //
        self.commentLabel = [UILabel new];

        self.commentLabel.textColor     = [UIColor colorWithRed: 0.21f green: 0.21f blue: 0.21f alpha: 1.00f];
        self.commentLabel.font          = [UIFont helveticaNeueRegularOfSize: 13.33f];
        self.commentLabel.numberOfLines = 0;
        self.commentLabel.lineBreakMode = NSLineBreakByWordWrapping;

        [self.contentView addSubview: self.commentLabel];
    }

    return self;
 }

2 个答案:

答案 0 :(得分:2)

问题可能是你错误地保留并且永远不会在你没有展示的代码中释放单元格对象,比如你正在做什么来计算不同的行高。

它与标签本身无关,或与显示不同高度的文本有关的任何事情。我制作的桌子的行高不同,标签或文字直接显示的长度不同的文字,没有这样的泄漏。

您可能希望查看有关此主题的section from my book

答案 1 :(得分:1)

问题在于我以某种方式将tableview框架高度设置为tableviews内容的高度,因此实际上所有单元格都是可见的 - 因此不会被重用。

感谢@matt让我朝着正确的方向前进。