我有25个表格单元格,我想将它们加载到一起,而不重复使用它们。
任何想法?
答案 0 :(得分:5)
如果您想避免回收表格单元格,则可以避免在dequeueReusableCellWithIdentifier:
方法中调用tableView:cellForRowAtIndexPath:
。
如果要对所有单元格进行一次性初始加载,可以在表格的数据源的init方法中执行以下操作:
// myCellArray is an instance var of type NSMutableArray.
myCellArray = [NSMutableArray new];
for (int i = 0; i < 25; ++i) {
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0];
UITableViewCell *cell = [self tableView:tV cellForRowAtIndexPath:indexPath];
[myCellArray addObject:cell];
}
这会将单元格保留在内存中,因为它们会被myCellArray
保留给您。
为了提高效率,您的cellForRowAtIndexPath:
方法可以是这样的:
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if ([myCellArray count] > indexPath.row) {
return [myCellArray objectAtIndex:indexPath.row];
}
return [self createCellAtRow:indexPath.row];
}
但是,您需要小心使用比您认为需要更多的内存,并避免花费太多时间初始化表。在许多情况下,如果您只是以标准方式使用回收的单元格,您的应用程序可能会显得更快并且使用更少的内存(例如,建议在the UITableViewDataSource docs中)。
答案 1 :(得分:0)
您无法将它们全部加载在一起。但对于“不可重用”单元,您可以制作唯一的单元可重用标识符。因此,它需要相同的(第一,第二,第三)单元格 - 它可以已经创建了一个单元格。对于新细胞,它们将根据需要创建。
如果您需要一次加载所有单元格,可以调用
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
在viewDidLoad中为您需要的每个indexPath。