我有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;
}
}
编辑:添加代码。