Удаление представления после использования с swift

#ios #uiviewcontroller #uinavigationcontroller #swift

#iOS #uiviewcontroller #uinavigationcontroller #swift

Вопрос:

При запуске моего приложения отображается кнопка входа в систему. Это LoginViewController. Я создаю экземпляр UINavigationViewController, имеющий LoginViewController в качестве RootViewController. Затем, после входа в систему (с использованием Facebook SDK) Я показываю второе представление, TableViewController. Вот так:

     self.navigationController.popViewControllerAnimated(false);
    self.navigationController.pushViewController(
        tableView, animated: false
    );
  

Однако с этим подходом связано несколько проблем. Для начала, во втором представлении отображается кнопка «Назад», которую, я знаю, я могу скрыть (и должен, потому что я открыл первое представление). Но, что хуже всего, NavigationController не назначается TableViewController, который в настоящее время отображает только кнопку выхода. Итак, когда я нажимаю выход из системы, очевидно, происходит сбой следующего:

     self.navigationController.popViewControllerAnimated(false);
    self.navigationController.pushViewController(
        loginView, animated: false
    );
  

Дело в том, что если я закрою приложение с активным входом в систему (то есть токен facebook для входа в систему кэшируется), я хочу, чтобы оно переходило непосредственно ко второму контроллеру представления (табличное представление). У меня есть это в may AppDelegate, в didFinishLaunchingWithOptions:

     if (Session.activeSession().isOpen()) {
        rootViewController = tableView;
    }
    else {
        rootViewController = loginView;
    }
  

Каков наилучший подход для этого сценария? Может быть, мне следует просто сложить два представления (не выскакивая)? Если да, то как мне получить второе представление под тем же NavigationController? Попытка развернуть TableView вызывает исключение, когда приложение запускается без маркера входа, после выполнения входа в систему, а затем выхода из системы.

Лучшие.

Комментарии:

1. Как насчет navigationController.viewControllers = [tableView] ?

2. Я думаю, что это не устанавливает TableView.NavigationController, или это так?

Ответ №1:

Это отличная возможность для контроллера модального представления! Используйте UINavigationController для всего, для чего вам это нужно (просмотр таблицы плюс другие подробные сведения отключены от этого). Но когда вам нужно, чтобы пользователь вошел в систему, используйте presentViewController из навигационного контроллера, чтобы отобразить другой контроллер впереди. Это может быть UINavigationController само по себе или простое UIViewController . Когда вы закончите с этим, вызовите метод dismiss, и он отключится, оставив ваш базовый навигационный контроллер там, готовым к использованию. Надеюсь, это поможет!

Комментарии:

1. Кажется отличным =) Я не подумал о представлениях модели! Спасибо