Лучшие практики MVC и просмотр разгрузки контроллера?

Чтобы разгрузить мой контроллер представления, я решил отделить 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. Могу ли я иметь сетевой уровень в источнике данных?

Если да, то как уведомить контроллер представления, отображающий табличное представление, об обновлении его представления после получения данных с сервера?

1 ответ

  1. Ссылка на навигационный контроллер? Вам не нужно ссылаться на navigationController. Любой контроллер представления получает свой навигационный контроллер по умолчанию.

  2. Не существует правильного способа ссылки на tableView. Вы можете использовать любой из них, который соответствует вашим потребностям, так как все они направлены от Apple. Вы можете установить его источник данных / делегировать с помощью своего кода или из инспектора соединений (или вы можете использовать механизм Ctrl + перетаскивание).

  3. UITableViewDataSource предназначен для работы с внешним видом табличного представления. (См. Здесь для получения дополнительной информации: UITableViewDataSource и UITableVIewDelegate). То есть вы настраиваете, как должно выглядеть ваше табличное представление. Это не имеет ничего общего с вашими фактическими данными. Но вы можете настроить сетевой уровень для обновления TableView когда ваши данные получены с сервера. Вы просто перезагружаете свое табличное представление, когда вы готовы показать свои обновленные данные.

0
Другие вопросы по тегам