我正在尝试使用 Model-View-Presenter 实现 UITableViewController
。由于我是这个概念的新手,所以我对如何将 UITableView 的
数据源协议(protocol)与 UIViewController
分开感到非常困惑。
很多文章都赞同View+Viewcontroller需要哑巴,只考虑UI和它们的布局。 另一方面,Presenter 需要成为 View 和模型之间的促进者并实现逻辑,但他们声明不包括 UIKit,因为它不直接操作 UI。这就是我的困惑所在。
我们在实现UITableView的时候,要实现两个协议(protocol):UITableViewDelegate
和UITableViewDataSource
,尤其是数据源。
我假设 delegate 属于 View 部分,并在收到用户操作时将事件传递给 Presenter。
但是,要实现 UITableViewDataSource
,我们必须有一些 TableView 使用的模型。话虽如此,我只能想到两种方式以某种方式适应 MVP。
将Model值从Presenter传给
UITableView
,为了数据源(比如为特定索引创建一行),让它在 View 中只读有值(value)。但后来我认为它违反了 MVP 概念,因为 Model 值是由 View 直接访问的。让演示者成为数据源。但是由于 Presenter 不应该导入 UIKit,我认为导入 UIKit 和实现 UITableViewDatasource 也违反了 MVP 概念。
长话短说,我很困惑在哪里以及如何适本地实现 UITableDatasource ...如果有人很了解这个概念,请分享您的知识。提前致谢!
最佳答案
第一个选项是使用适配器 模式 和 MVP。您可以在适配器类中使用 UITableViewDelegate 和 UITableViewDataSource。通过这种方式,您可以将 tableView 逻辑与 ViewController 分开,Presenter 仍然不会包含 UIKit。
关于iOS - MVP 设计中的 UITableView 委托(delegate)和数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55882273/