gpt4 book ai didi

ios - 将新行插入 tableView 时是否必须调用 begin/endUpdates 方法?

转载 作者:搜寻专家 更新时间:2023-11-01 07:11:25 25 4
gpt4 key购买 nike

  1. 描述:

    当应用程序启动时,会创建一个包含 3 行的 TableView 。如果点击导航栏中的添加按钮,将在表格 View 中添加一个新行。添加行操作背后的核心过程是方法 func insertRows(at:, with:)

    Apple documents许多堆栈溢出答案(例如 this one)建议将插入、删除或选择 TableView 的行和部分的任何方法调用放在函数 beginUpdates()endUpates 之间()

    我删除了 beginUpdates()endUpdates();事实证明,没有它们,该应用程序也能正常工作。

  2. 问题:

    添加 beginUpdates()endUpdates() 有什么好处?

  3. 我为什么问这个问题:

    函数 func insertRows(at:, with:) 正在调用委托(delegate)函数 tableView(_:, cellForRowAt:) -> UITableViewCell 以通过以下方式创建新单元格dequeueReusableCell(withIdentifier:, for:) -> UITableViewCell,这与 tableView 在应用程序启动时创建 3 个默认行的过程相同,但是,没有这样的beginUpdates/endUpdates 在那里。那么为什么我需要稍后在添加新行时添加此过程,而没有它们应用程序似乎仍然可以正常工作?

最佳答案

要为行和节的批量插入、删除和重新加载设置动画,请在连续调用 beginUpdatesendUpdates 定义的动画 block 中调用相应的方法。如果不在该 block 内调用插入、删除和重新加载方法,则行和节索引可能无效。可以嵌套调用 beginUpdatesendUpdates;所有索引都被视为只有外部更新 block 。

在一个 block 的结尾——也就是在 endUpdates 返回之后—— TableView 查询它的数据源并像往常一样委托(delegate)行和部分数据。因此,支持 TableView 的集合对象应该更新以反射(reflect)新的或删除的行或部分。

Apple Docs

关于ios - 将新行插入 tableView 时是否必须调用 begin/endUpdates 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44699266/

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