从Storyboard加载自定义UITableViewCell

时间:2014-04-06 20:52:21

标签: ios uitableview autolayout heightforrowatindexpath

目前,我正在使用故事板的自动布局来动态调整自定义UITableViewCell的大小。除了滚动时存在内存泄漏外,一切都正常。

我知道问题来自于调用

[self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];

来自内部

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

我的问题是,创建参考单元的最佳方法是什么?如何在没有dequeueReusableCellWithIdentifier的情况下从故事板加载单元格?

可以从dequeueReusableCellWithIdentifier拨打viewDidLoad并创建参考单元作为属性吗?

我需要参考单元用于调整大小。

感谢您的帮助。

3 个答案:

答案 0 :(得分:10)

关于如何创建参考单元格(参见原始问题),我可以看到几个选项:

  1. 使用XIB创建自定义单元格,这里有一篇很棒的文章 - > a link

    • 这是@smileyborg向我指出的,谢谢!
  2. 在代码中创建自定义单元格以及约束。

  3. 在storyboard中创建自定义单元格作为原型单元格

    • 之后有2个选项:
      • 将自定义单元格从表格视图拖放到情节提要场景,作为顶级nib对象(不是视图层次结构的一部分),只需创建插件即可。
      • 复制自定义单元格并将其粘贴到故事板场景中。以这种方式使用时,不需要将原始单元格与表格一起注册以便出列。
      • 这两种方法的一个小问题是,一旦将自定义单元格拖放到情节提要场景中,您将无法直观地看到它并安排UI。
    • 这里很棒的文章 - &gt; a link <!/ LI>
  4. 谢谢大家的帮助!

答案 1 :(得分:1)

  

可以从viewDidLoad调用dequeueReusableCellWithIdentifier并创建一个引用单元作为属性吗?

是的,你可以这样做。或懒惰初始化属性:

- (UITableViewCell *)referenceCell
{
    if (!_referenceCell) {
        _referenceCell = [self.tableView dequeueReusableCellWithIdentifier:@"Cell"];
    }
    return _referenceCell;
}

答案 2 :(得分:0)

您可以将单元格出列一次并存储高度:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSNumber *height;

    if (!height) 
    {
        UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"YourCustomCell"];
        height = @(cell.bounds.size.height);
    }

    return [height floatValue];
}