我有一个 UITableView
用一堆静态的UITableViewCell
s 代表菜单项。单元格都在 Storyboard 中定义
当UITableView
出现,我想为每个单元格设置详细文本,并为该菜单项设置一个值。
我已标记所有表格单元格并在 viewDidLoad
中,我用 viewWithTag:
检索所有单元格.但是,我只能检索屏幕上已经可见的单元格。
我知道静态表格单元格不会从 NIB 加载,直到它们出现在屏幕上。
有没有办法强制 UITableView
在开始时加载所有单元格?
我正在考虑使用 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;
}
}
编辑:添加代码。
最佳答案
为什么要依靠标签来确定哪些单元格是哪个单元格?使用 row
NSIndexPath
的属性(property)执行tableView:cellForRowAtIndexPath:
中的逻辑时.如果要在编译时指定每种类型,可以创建 UITableViewCell
每种菜单类型的子类,但我不建议这样做。
如果您可以发布一些表格 View 代码,我们可以查看一些无需viewWithTag:
的方式重新实现它。 .
关于ios - 如何检索尚未出现在屏幕上的静态 UITableViewCell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16005752/