【发布时间】:2013-02-12 16:47:27
【问题描述】:
我想换出 tableview 的内容。数据源的元素带有一个标志,表示是否应该显示它们。
最终,我希望能够根据标志交换显示的内容。不过,现在,我将确定以下问题的答案。
我的表格如何只显示数据源的子集?
我不是要求 [tableView 重新加载],这似乎是我的大多数搜索结果。我想根据标准(在本例中为标志)一次只显示一些数据源项。
为了清楚起见,这里是一个功能示例。
我们在一个数组中有 50 个 Friend 元素。它是我们表的数据源。当我们加载应用程序时,会显示所有 50 个朋友。
其中 20 个朋友在 Friend 类中被标记为“真棒”。当您点击 Awesome 按钮时,这 20 个会显示在表格中。
其中 10 个在 Friend 类中被标记为“Lame”。当您点击 Lame 按钮时,这 10 个会显示在表格中。
我需要查看哪些方法来实现这一目标? TableView 的讨论非常广泛,到目前为止,我一直在寻找错误和错误,但没有令人满意的结果。
【问题讨论】:
-
简而言之,这是不可能的。使用给定答案的组合来完成它。
-
下面的答案解决了您的问题,但关键是您误解了“数据源”的含义。表格视图准确显示数据源提供的内容。数据源负责过滤、排序、合并、转换或以其他方式将数据处理成表格所需的形式。您将数据源与模型混淆了。模型应该与数据源分开,数据源过滤、排序等它从模型中检索到的东西。
-
非常感谢@RobNapier。这就说得通了;我从来不知道 MVC 阈值是这样跨数据源绘制的。
-
数据源的作用类似于微软使用的 MVVM 架构模式中的 ViewModel。有一些 Cocoa 开发人员研究 MVVM 的支持者;它可能比 MVC 更接近我们在实践中所做的事情(我还没有就 MVVM 做出决定;Big Nerd Ranch 提倡的 MVCS 架构可能更接近我通常做的事情)。
标签: ios uitableview datasource