【问题标题】:Where to place the update logic for a custom UITableViewCell? (iPhone)在哪里放置自定义 UITableViewCell 的更新逻辑? (苹果手机)
【发布时间】:2009-11-15 01:09:14
【问题描述】:

我有一个关于 UITableView 中自定义单元格的快速“最佳实践”问题。 当我在

- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

(1) 如果我在 (cell == nil) 块内构建标签并设置它们的文本属性;只有屏幕上可见的单元格中会包含正确的文本,其余的将被重复使用。

(2) 好的,所以我尝试将自定义单元格的构建移到块之外。这当然会导致我的单元格在每次用户滚动时一遍又一遍地重绘……并且彼此重叠。

(3) 我还尝试将自定义单元格(标签、图形等)的绘图放置在 (cell == nil) 块内,但在块之后设置 labels.text 属性。这不能作为我的 然后不能从它们被实例化的块外部访问 UILabel。我可以为(UILabel *l in cell.contentView.subviews) 做一些疯狂的事情,但这需要每个标签的 if 语句,并且可能需要一些标签来识别它们与。

(4) 然后我可以在 (cell == nil) 块之前声明所有标签,然后在块内进行实例化和绘图,并在 (cell == nil) 块之后设置 text 属性。但是当我通过 10 个 UIlabels 时,这看起来和感觉真的很乱,让它们像这样在 (cell == nil) 块内部和外部散布,而且每次表格必须“刷新”时都会声明它们。

我问的原因是因为在使用 2-4 个标签时我总能找到解决方法,但这次我需要设置 12 个自定义 UILabel,我想这样做,这样我就必须重绘最少的数量图形,因为可能会有很多单元格。

我看到人们和 Apple 文档使用以下示例:

- (void) configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {

但我真的不知道这对我有什么帮助:)

希望有人能指出这类事情的“最佳实践”。

谢谢!

【问题讨论】:

    标签: iphone uitableview uilabel


    【解决方案1】:

    您的选项 3 是要走的路。每当需要一个新单元格时(即在if (cell == nil) 块中)创建带有所有子视图的单元格,并在块之后设置标签的内容。

    如果您使用自定义UITableViewCell 子类,您可以为每个标签声明一个属性,然后在块外使用cell.myLabelX 访问它们。如果没有,我会使用tag 属性来建立连接。在创建单元格时,为每个标签分配一个唯一的标签:

    UILabel *label1 = [[UILabel alloc] initWithFrame:...];
    label1.tag = MYLABEL1TAG;
    [cell addSubview:label1];
    ...
    

    在块外,通过标签检索标签:

    UILabel *label1 = (UILabel *)[cell viewWithTag:MYLABEL1TAG];
    label.text = ...
    

    这也是 Apple 在其示例代码中很多地方的做法(至少我上次查看时他们是这样做的)。

    【讨论】:

    • 谢谢 Ole :) 这对我的数字 3 有点扭曲 :) 但它为代码增加了非常好的可读性。我不知道 viewWithTag,我认为唯一的方法是遍历视图并使用 switch 或 if 语句来识别标签。也许这就是为什么我没有在 Apples 代码中看到它的原因 :) 再次感谢您。
    • 在不牺牲可读性的情况下,可以这样做:((UILabel *)[cell viewWithTag:TRIP_LABEL]).text = @"我的哥本哈根之旅";
    • 我知道这是很久以前的事了,但只是想感谢您的回答。解决了一个让我讨厌的问题。
    猜你喜欢
    • 2014-03-16
    • 2011-09-08
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多