【问题标题】:MVC best practices and view controller offloading?MVC 最佳实践和视图控制器卸载?
【发布时间】:2017-03-20 02:32:32
【问题描述】:

为了卸载我的视图控制器,我决定将我的视图控制器中的 TableViewDataSource 和 TableViewDelegate 分离到它们自己的类中。我对如何解决以下这些问题感到困惑:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath, animated: true)

    hideNavbar = true
    let vc = TopicSelectionViewController()
    self.navigationController?.present(vc, animated: true, completion: { 
        self.hideNavbar = false
    })

}
  1. 如果我把这个放在 TableViewDelegate 自己的类中,什么是最好的 引用 navigaitonController 的做法?
  2. 引用正在使用的 tableView 的正确方法是什么 这个数据源/委托?
  3. 我可以在 dataSource 中设置网络层吗?

如果是这样,在从服务器检索数据后,如何通知正在显示表格视图的视图控制器更新其视图?

【问题讨论】:

  • 如果您尝试遵循 MVVM 模式,将数据从 ViewController 中分离出来,您仍然必须将这些委托函数放在您的 ViewController 中,而不是其他类中,您只需在其他类

标签: ios swift model-view-controller


【解决方案1】:
  1. 引用导航控制器?您不需要参考 navigationController。任何视图控制器都会获得它的默认导航控制器。

  2. 没有正确的方法来引用 tableView。您可以使用任何适合您需要的工具,因为它们都是由 Apple 指导的。您可以通过代码或从连接检查器设置它的数据源/委托(或者,您可以使用控制点击+拖动机制) .

  3. UITableViewDataSource 旨在处理表格视图的外观。 (更多信息请参见此处:UITableViewDataSourceUITableVIewDelegate)。那就是您配置表格视图的外观。它与您的实际数据无关。但是您可以配置网络层以在从服务器检索数据时更新您的TableView。当您准备好显示更新的数据时,您只需重新加载表格视图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多