2

我有UITableView一堆UITableViewCell代表菜单项的 static 。单元格都在情节提要中定义

出现时UITableView,我想为每个单元格设置详细文本,并为该菜单项设置一个值。

我已经标记了所有表格单元格,并在 中viewDidLoad检索了所有带有 的单元格viewWithTag:。但是,我只能检索屏幕上已经可见的单元格。

我知道静态表格单元格不会从 NIB 加载,直到它们出现在屏幕上。

有没有办法强制 aUITableView在开始时加载所有单元格?

我正在考虑UITableViewDelegate:tableView:cellWillAppear在屏幕外单元格出现时使用它们来初始化它们,但我宁愿没有单独的方法来初始化单元格。


更新

该表用作选择要查看的列表的菜单。我正在尝试显示列表项的计数。在每个菜单项(表格单元格)上,我将列表 ID 设置为 NIB 中的标记,以及列表的名称。

按标签检索单元格

- (void) setDetailLabelForList: (NSInteger)listId withString: (NSString*) string
{

    NSInteger tag = listId;
    UITableViewCell* cell = [self.tableView viewWithTag:tag];
    cell.detailTextLabel.text = string;
}

另一种方法是通过索引路径检索静态单元格。这需要 listID 和索引路径之间的映射。但是,结果是相同的,因为检索尚未出现在屏幕上的静态单元格会返回 nil。

按索引路径检索

- (void) setDetailLabelForList: (NSInteger)listId withString: (NSString*) string
{
    NSString* path = [vocabListToUIMap objectForKey:[NSNumber numberWithInteger:listId]];
    if (path)
    {
        NSArray* pathElements = [path componentsSeparatedByString:@"."];
        NSInteger sectionNum = [[pathElements objectAtIndex:0] intValue];
        NSInteger itemNum = [[pathElements objectAtIndex:1] intValue];

        NSIndexPath* path = [NSIndexPath indexPathForRow:itemNum inSection:sectionNum];

        UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:path];
        cell.detailTextLabel.text = string;
   }
}

编辑:添加代码。

4

2 回答 2

0

为什么要依靠标签来确定哪些单元格是哪个单元格?执行 中的逻辑时使用 的row属性。如果您想在编译时指定每种类型,您可以为每种菜单类型创建子类,但我不建议这样做。NSIndexPathtableView:cellForRowAtIndexPath:UITableViewCell

如果您可以发布一些表格视图代码,我们可以看看一些方法来重新实现它,而无需viewWithTag:.

于 2013-04-15T01:12:59.713 回答
0

我通过使用保存在单元格上的标签设置解决了这个问题UITableViewDelegate tableView:willDisplayCell:forRowAtIndexPath。此时,静态单元已从 NIB 加载。

于 2013-04-19T07:50:55.600 回答