Как смоделировать возврат к ViewController, который не был показан - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть приложение iOS с экраном входа в систему.Как только пользователь входит в систему, я использую presentViewController, чтобы перейти на главный экран приложения.Если пользователь выходит из главного экрана, я dismiss текущего (основного) контроллера просмотра, чтобы вернуться к экрану входа в систему.Это прекрасно работает и использует стандартную анимацию для «модального представления».

Теперь я хочу изменить это так, чтобы, если пользователь уже вошел в систему, экран входа в систему пропускается.Итак, в моем делегате приложения я делаю следующее (псевдокод)

if (user logged in)
   presentViewController(mainVC)
else
   presentViewController(loginVC)

Вопрос: Если пользователь уже вошел в систему и я показываю контроллер основного вида напрямую, я больше не могу «отклонить» его для возвратаконтроллер вида входа в систему (как это никогда не было показано).Как я могу «смоделировать» возврат к VC входа в систему?

В Android чего-то похожего можно достичь, вручную создав «задний стек» действий вручную (https://developer.android.com/training/implementing-navigation/temporal). Есть ли что-то эквивалентноеэто в iOS?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Я сталкивался с такой проблемой несколько раз.То, как я справляюсь с этим, я использую фиктивный VC в начале приложения с именем StartupVC.В StartupVC я добавляю логику, чтобы проверить, вошел ли пользователь в систему или нет.Если пользователь вошел в систему, я отправляю его на домашний экран.Если нет, я представляю экран входа в систему.

Теперь, когда пользователь выходит из системы, я выскакиваю контроллеры представления в StartupVC.В стартовом VC я поместил проверку входа в систему методом viewWillAppear, поэтому, как только StartupVC снова отобразится, пользователь попадет на экран входа в систему.

Чтобы сделать переход плавным, вы можете включитьотключение анимации при переходе назад к входу в систему после выхода из системы.

0 голосов
/ 07 февраля 2019

Вы должны проверить при запуске приложения.Пользователь вошел в систему или нет.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {


if isUserLoggedIn {
        //Set Main ViewController
        self.window?.showAuthenticationVC

    } else {
        //Optional.. But you can set here Logic VC
        self.window?.showMainController()
    }
    return true
}

isUserLoggedIn Флаг, который управляет пользователем, вошедшим в систему или нет.Вы можете сохранить это значение в UserDefaults.

Управление rootViewController для loggedIn и loggedOff User.

extension UIWindow {



 func showAuthenticationVC() {

        self.makeKeyAndVisible()
        let authenticationVC : LoginController = LoginController()
        let navigationController = UINavigationController(rootViewController: authenticationVC)
        self.rootViewController = navigationController

    }

    func showMainController() {
        self.makeKeyAndVisible()
        let authenticationVC : MainController = MainController()
        let navigationController = UINavigationController(rootViewController: authenticationVC)
        self.rootViewController = navigationController
    }

}

И во время действия при входе в систему.Установите showMainController(), используя AppDelegate window.то же самое во время выхода из системы вызовите showAuthenticationVC(), используя window свойство AppDelegate.

Надеюсь, это поможет вам!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...