Как использовать архитектуру MVP с UITabBarController - PullRequest
0 голосов
/ 16 января 2019

Я использую шаблон Model View Presenter в приложении.

У меня есть требование ввести UITabBarController для обеспечения навигации по вкладкам между маршрутами.

Я понимаю, как бы я использовал это, возможно, в MVC или MVVM, но я не уверен, как применить это, не нарушая MVP принципов.

Когда я настраиваю панель вкладок, я предполагаю, что применяю контроллеры вида как

let controllers = [favoritesVC, downloadsVC, historyVC]
tabBarController.viewControllers = controllers

Но теперь, когда я нажимаю на вкладку, я буду вызывать контроллер представления напрямую и не давать указание запустить сцену?

1 Ответ

0 голосов
/ 17 января 2019

Трудно ответить, не увидев больше кода, однако я считаю, что в MVP вы должны сконфигурировать свои контроллеры представления, используя Configurator.

class FavouritesConfigurator {

    func configureViewController(delegate: FavouritesSceneDelegate?) -> FavouritesViewController {
        let viewController = FavouritesViewController()
        let presenter = FavouritesPresenter(view: viewController)
        presenter.delegate = delegate
        viewController.setPresenter(presenter)
        return viewController
    }
}

Ваш метод запуска координатора должен просто вызвать FavouritesConfigurator и вернуть ViewController, настроенный вашим докладчиком и т. Д.

Вы можете использовать возвращаемое значение этого FavouritesConfigurator для настройки ваших просмотров.

Это просто случай удаления каждой конфигурации представлений из метода запуска и непосредственного вызова этого конфигуратора. Это не нарушает никаких принципов, поскольку ваши компоненты по-прежнему изолированы, проверяемы и вызываются правильно.

Опять же, не видя ваш код, трудно быть точным, но попробуйте это:

let controllers = [FavouritesConfigurator().configureViewController(delegate: self),...,...]
tabBarController.viewControllers = controllers
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...