【发布时间】:2009-06-16 01:13:37
【问题描述】:
这似乎应该是直截了当的。从技术上讲,我可以完成这项工作,但如果我想执行某些 UI 动画(使用 deleteRowsAtIndexPaths:withRowAnimation:),事情就会变得棘手。似乎数据源和 UI 正在争论谁应该先删除。然后我必须人为地保留数据以进行 UI 更新。
我目前的设置:
在我的模型中:
- 创建一个多维 NSArray 以 保存我的数据。 (每个子数组 代表一个部分)。
- 在每个部分中放置一个 NSDictionary 数组来表示一个数据 单个单元格。
在我的视图控制器中:
- 创建一个多维 NSArray 以 握住我的单元控制器(模仿 数据结构)。
- 将每个模型字典分配给 ivar 在适当的单元格中 控制器。
- 将数据连接到单元格
这会让我的 UITableView 在屏幕上正确显示单元格。现在,如果我想过滤表中的数据,请执行以下操作:
在我的模型中:
- 创建一个 NSPredicate 实例。
- 过滤每个子数组 多维数组。
- 在每个字典中设置一个标志 是在结果的范围内 过滤后的数组。
在我的视图控制器中:
- 我创建了一个新的多维 NSArray。该数组将保存 “过滤”的单元控制器 数据”
- 循环通过电流 多维控制器数组。 将其添加到新的“过滤数组如果 它的模型标志已设置。
- 更换未过滤的控制器 与新的数组。
- 更新表格。
这也很有效。只要我不介意 UI 即时更新。如果我想删除带有动画的行,我必须将这些索引传递给要删除的表。
为此,我向视图控制器添加了几个步骤:
在我的视图控制器中:
- 我创建了一个新的多维 NSArray。该数组将保存 “过滤”的单元控制器 数据”
- 循环通过电流 多维控制器数组。 将其添加到新的“过滤数组如果 它的模型标志已设置。
- 创建一个新的 NSArray 来保存索引 被删除。
- 循环通过电流 多维控制器数组。 将其单元格的索引添加到 "toBeDeleted" 数组,如果它的模型是 未设置标志。
- 更换未过滤的控制器 与新的数组。
- 执行 deleteRowsAtIndexPaths:withRowAnimationn。
到目前为止,这种方法效果不佳。我在删除带有边缘情况的行时遇到问题(空白部分和所有可见单元格都被删除)。
这让我觉得我的方法可能有缺陷。有没有人在应用程序中实现过这个?你是怎么解决这个问题的?你的行动画有效吗?
【问题讨论】:
-
我已经使用我概述的here(个人博客文章)的设计实现了这一点,当我清理它并使其更通用时,我将发布一些特定的代码。
标签: iphone cocoa-touch uitableview uikit