gpt4 book ai didi

iphone - 为什么程序员使用configureCell :atIndexPath: method to config the tableView Cell

转载 作者:行者123 更新时间:2023-12-03 18:15:58 24 4
gpt4 key购买 nike

直到几天前,我还用 UITableViewCell 编写所有内容

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

方法。但最近我发现 iPhone 开发人员(或 mac)使用 configureCell:atIndexPath: 甚至大多数苹果提供的源代码都将此作为类函数之一。 所以我的问题基本上是为什么我们想再创建一个函数来提供单元格内容,然后只需在 cellForRowAtIndexPath: 方法中编写整个代码。

PS。对于不熟悉这一点的人,您应该查看苹果源代码。 configureCell:atIndexPath: 不是 UITableViewDatasource 中的另一个方法,它只是我们在每个具有 table view 的类中拥有的一个类函数。我们这样使用它。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier] autorelease];
}
[self configureCell:cell atIndexPath:indexPath];
return cell;
}

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
cell.titleLabel.text = [NSString stringWithFormat:@"%d",indexPath.row];
}

更重要的是,在尝试使用这种风格后,我爱上了这个功能,现在我一直在使用它。(当我使用 UITableView 时)

编辑:好的,我认为人们对我的问题有错误的想法,所以让我说得更清楚。

我的意思是,当您可以将所有代码放入此函数中时,为什么还要创建另一个函数

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

我不关心方法名称。

最佳答案

这样做是因为当单元格已经在屏幕上时您可能想要更新它们。您可以简单地从 TableView 中获取现有单元格并通过 configureCell:atIndexPath: 运行它,而不是完全刷新单元格。如果该方法正确实现,这将更新单元格中的所有数据,而无需 UITableView 删除旧单元格、出列或分配新单元格并将其显示在屏幕上。

<小时/>

对于历史兴趣:

据我所知,我是负责 configureCell:atIndexPath: 的人。我确信其他人也提出了同样的想法,但我相信普及它的代码片段最初是由我编写的。后来它被苹果传播并成为一个惯例。

NSFetchedResultsControllerDelegate 的早期版本有一个 controllerDidChangeContent: 方法,但没有 controllerWillChangeContent: 调用,这意味着没有机会调用-[UITableView beginUpdates] 在更改 TableView 的内容之前。

我提交了 Radar #6708453 请求他们添加此委托(delegate)方法,并包含一些示例代码来向他们展示我想要做什么。该代码在 refreshCell:atIndexPath: 调用中具有实际的单元格更新逻辑,因此可以从 tableView:cellForRowAtIndexPath:controller:didChangeObject: 调用它atIndexPath:forChangeType:newIndexPath:.

当下一个 beta 种子出来时,我发现 iOS 工程团队不仅添加了我建议的方法,还将我的错误报告中的示例代码复制到 NSFetchedResultsControllerDelegate documentation 中。 ,尽管他们明智地将名称更改为不太困惑的 configureCell:atIndexPath:

我今天实际上使用 Master/Detail iOS Core Data 模板启动了一个新项目,并注意到我的代码以及其中的 configureCell:atIndexPath: 方法位于模板中。我在谷歌上快速搜索了一下,看看它是否已经成为一种常见的惯例。看来确实如此。我对这一小块代码本身的构成感到非常自豪!

关于iphone - 为什么程序员使用configureCell :atIndexPath: method to config the tableView Cell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5467831/

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