0

// 实际问题
在使用与 nib 中指定的单元格标识符不同的单元格标识符加载 nib 文件(tableviewcell)时,我需要帮助。

// 我正在做的事情的背景
我有一个自定义 UITableViewCell,其中包含少量标签、少量图像和少量按钮。所有这些都放在一个 nib 文件中。表格视图单元格的内容需要根据某些条件动态更改,即如果横向则不显示按钮;如果标签中没有要显示的内容,则不显示标签等。左侧的相邻标签/视图应扩展以填充缺少的标签/按钮的空间。

我能够让它工作。我这样做的方法是在cellForRowAtIndexPathI
- 删除不需要显示的视图,removeFromSuperView并通过
- 调整frame并调用setNeedsDisplay需要调整的视图。

我使用 nib 文件中提到的相同单元格标识符来使单元格出列。如果返回的单元格为 nil,那么我使用loadNibNamed:withOwner:options加载笔尖。但是,我担心这会在来回滚动时导致问题,因为当条件不满足时,被重用的单元格可能没有显示内容所需的视图,因为它们可能已经被删除。

为了解决这个问题,我计划对不同的条件使用不同的单元格标识符,这些条件会触发单元格的不同外观。或者,我也在考虑只隐藏视图并将相邻视图扩展到隐藏视图。这样我就不需要处理不同的单元格标识符。

Edit2:
我隐藏和调整相邻视图框架的替代方法满足了我的需要。

但是我仍然想找到我上面描述的实际问题的答案。

// 潜在的解决方案
我想知道是否可以通过函数的options参数将单元格标识符传递给 nib 加载代码loadNibNamed。这可能吗?如果你们能提供一个示例代码来实现这一点,那就太棒了。

谢谢你的时间。

4

3 回答 3

0

您需要做的就是在 nib 中创建多个具有不同标识符的单元格,然后dequeueReusableCellWithIdentifier使用适当的标识符进行调用,以获得对适当类型单元格的引用。

于 2012-05-11T05:02:28.790 回答
0

我对这个解决方案不是很自豪并且可能会出现问题,但我会在从 nib 加载后尝试设置单元格的标识符。

- (id)initWithReuseIdentifier:(NSString *)reuseIdentifier
{
    self = [[NSBundle mainBundle] loadNibNamed:@"MyCell" owner:nil options:nil].lastObject;
    [self setValue:reuseIdentifier forKeyPath:@"_reuseIdentifier"];

    // ...

    return self;
}
于 2012-12-06T08:34:07.850 回答
-1

您无法更改 nib 中指定的单元重用标识符。参考。您正在谈论的选项字典也不会为您执行此操作。这些选项与 nib 中的代理对象相关。

与其删除子视图,不如简单地隐藏它们。您可以使用 IBOutletCollections 使批量隐藏/取消隐藏更容易。如果需要,您可以将单元格重置为其默认状态prepareForReuse

也看看 UINib - 这可以比 loadNibNamed 更快地从 nob 创建对象,这将有助于您的滚动性能。

于 2012-05-12T06:57:25.710 回答