iOS - MVP 设计中的 UITableView 委托(delegate)和数据源

标签 ios uitableview mvp

我正在尝试使用 Model-View-Presenter 实现 UITableViewController。由于我是这个概念的新手,所以我对如何将 UITableView 的 数据源协议(protocol)与 UIViewController 分开感到非常困惑。

很多文章都赞同View+Viewcontroller需要哑巴,只考虑UI和它们的布局。 另一方面,Presenter 需要成为 View 和模型之间的促进者并实现逻辑,但他们声明不包括 UIKit,因为它不直接操作 UI。这就是我的困惑所在。

我们在实现UITableView的时候,要实现两个协议(protocol):UITableViewDelegateUITableViewDataSource,尤其是数据源。

我假设 delegate 属于 View 部分,并在收到用户操作时将事件传递给 Presenter。

但是,要实现 UITableViewDataSource,我们必须有一些 TableView 使用的模型。话虽如此,我只能想到两种方式以某种方式适应 MVP。

  1. 将Model值从Presenter传给UITableView,为了数据源(比如为特定索引创建一行),让它在 View 中只读有值(value)。但后来我认为它违反了 MVP 概念,因为 Model 值是由 View 直接访问的。

  2. 让演示者成为数据源。但是由于 Presenter 不应该导入 UIKit,我认为导入 UIKit 和实现 UITableViewDatasource 也违反了 MVP 概念。

长话短说,我很困惑在哪里以及如何适本地实现 UITableDatasource ...如果有人很了解这个概念,请分享您的知识。提前致谢!

最佳答案

第一个选项是使用适配器 模式 和 MVP。您可以在适配器类中使用 UITableViewDelegateUITableViewDataSource。通过这种方式,您可以将 tableView 逻辑与 ViewController 分开,Presenter 仍然不会包含 UIKit。

关于iOS - MVP 设计中的 UITableView 委托(delegate)和数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55882273/

相关文章:

ios - Xcode 6 - 存档提交失败并出现错误

ios - 我如何在 UIAlertController 中获取 textField 的值?

ipad - UITableView背景颜色

java - 如何修复 "unchecked call to ' AttachView(V )' as a member of raw type ' BasePresenter'"?

java - 如何在不打破MVP模式的情况下使用Room?

ios - 如何在 iOS 的 XMPP 框架中设置资源

ios - ValueForKeyPath 不起作用如何解决?

ios - 在 Swift iOS9 中从 Json 数据中提取值

iphone - 获取 NSArray 的 EXC_BAD_ACCESS

android - 在 MVP android 应用程序中的演示者之间进行通信