Каков наилучший подход к созданию экрана входа в приложение iOS, который скользит (представляя его модально) всякий раз, когда пользователь не вошел в систему?
Пользователь будет «выведен из системы» в следующих случаях:
- он никогда не заходил в приложение (т.е. впервые использовал)
- он явно вышел из приложения
- он вышел из системы на сервере (например, срок действия его токена безопасности на сервере истек, и это передается приложению)
Мое приложение состоит из UINavigationController
, который установлен как RootViewController приложения, и каждый экран (кроме экрана входа в систему) помещается в NavigationController по мере того, как пользователь перемещается по приложению. Один из экранов, к которому пользователь может перейти (т. е. который помещается в стек), — это экран выхода (где пользователь может выйти из приложения). Экран входа в систему должен появляться модально, когда это необходимо, а логика и представление должны происходить из одного централизованного места. Я использую раскадровки.
Что я пробовал, так это создать подкласс UINavigationController
(для RootViewController), и в его методе viewDidAppear
я проверяю, вошел ли пользователь в систему (я сохраняю флаг в NSUserDefaults
). Если он вошел в систему, первый экран приложения (программно) помещается в стек; если он не вошел в систему, экран входа в систему (программно) представлен модально.
Этот подход имеет следующие две проблемы:
- вы не можете установить фоновое изображение для подкласса
UINavigationController
, поэтому на короткое время появляется пустой экран viewDidAppear
подклассаUINavigationController
не вызывается при появлении в его RootViewController (особенно при выходе из экрана выхода из системы)
В идеале я хочу, чтобы одно центральное место проверяло, вошел ли пользователь в систему (я надеялся, что подклассовый метод UINavigationController
будет этим местом), чтобы проверять состояние входа пользователя в систему и при необходимости отображать модальный экран входа в систему.
Я просмотрел экран входа в систему с помощью раскадровки и Пример экрана входа в систему, модально основанный на раскадровке (и другие, упомянутые в них), но ни один из них не решает проблему представление модального экрана входа в систему из центральной точки.