gpt4 book ai didi

ios - 如何tableView :cellForRowAtIndexPath: is supposed to be used?

转载 作者:行者123 更新时间:2023-11-29 00:30:59 24 4
gpt4 key购买 nike

由 XCode 向导创建的主从项目包含 tableView:cellForRowAtIndexPath: 的实现,它调用 dequeueReusableCellWithIdentifier:forIndexPath:,然后调用自己的自定义方法 configureCell 用有效数据填充单元格控件,然后将单元格返回给调用者。据我了解,这就是表格如何绘制其单元格内容的方式。

我不明白的是当我想从代码中获取单元格时如何使用它。它是否应该由我的代码调用,或者它只是表框架本身使用的回调?

例如,如果我只想更改单元格中一个标签的文本,我想我可以调用 tableView:cellForRowAtIndexPath:,然后更改生成的单元格对象控件中所需的内容。但是调用 tableView:cellForRowAtIndexPath: 实际上会创建一个新的单元格对象(可能会重用未使用的单元格对象池中的一个),并用数据填充其中的所有控件(例如 ImageView 和标签)。当我只想更改一个标签时,这对我来说在性能方面看起来不太好。

那么也许我可以从 tableView:cellForRowAtIndexPath: 中删除 configureCell ?那么如何确保当[table reloadData]被调用时所有单元格内容都会被系统重绘呢?

附言XCode 7 向导创建了这种代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
[self configureCell:cell withObject:object];
return cell;
}

// Then later in controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:

case NSFetchedResultsChangeUpdate:
[self configureCell:[tableView cellForRowAtIndexPath:indexPath] withObject:anObject];
break;

configureCell 在这里被调用两次。对我来说似乎毫无意义。我希望至少为向导编写代码的人能够理解这是如何工作的。

最佳答案

这里调用了两个具有相似名称的不同方法。

tableView:cellForRowAtIndexPath: 是一个 UITableViewDataSource 方法,您可以实现该方法来创建要显示的表格的单元格。当新单元格将出现在屏幕上时,tableview 会调用此方法。

controller:didChange:... 正在调用一个名为 cellForRowAtIndexPath: 的不同方法,它是一个 UITableView 方法。此方法在表中查询先前使用 tableView:cellForRowAtIndexPath: 数据源方法创建后已显示的单元格,并且不会导致再次调用它。它调用此方法来访问已显示的单元格,并在对象更改时使用新信息更新它。

configureCell 的两次调用都是必要的。

关于ios - 如何tableView :cellForRowAtIndexPath: is supposed to be used?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41836788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com