Я решил это, поместив вид входа в систему без каких-либо переходов (туда-сюда), как на скриншоте ниже:
Затем я использовал собственный класс в контроллере панели вкладок, чтобы показывать его всякий раз, когда он мне нужен.
В классе контроллера панели вкладок я использую viewDidLoad, чтобы запустить представление входа в систему. Чтобы показать модальное представление, у меня есть одноэлементная вещь, которая хранит некоторое состояние, скажем, BOOL isAuthenticated, где я делаю магию:
- (void) performLoginIfRequired: (UIViewController *) source {
if (!self.isAuthenticated) {
NSLog(@"Is not authed");
UIStoryboard *storyboard = [UIApplication sharedApplication].delegate.window.rootViewController.storyboard;
UIViewController *loginController = [storyboard instantiateViewControllerWithIdentifier:@"loginScreen"];
[source presentModalViewController:loginController animated:YES];
} else {
NSLog(@"Is authe");
}
}
И, в моем случае, я хотел, чтобы оно отображалось при первом запуске приложения, а также когда оно снова выходит на передний план. Итак, я зарегистрировал свой контроллер панели вкладок в центре уведомлений, поэтому я получаю уведомление, если приложение возвращается:
-(void)viewDidLoad {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willEnterForeground:) name:UIApplicationWillEnterForegroundNotification object:nil];
}
В методе willEnterForeground я делаю:
-(void) willEnterForeground: (NSNotification *)notification {
[[myStateThingy defaultState] performLoginIfRequired:self];
}