Вот код Objective C, который работает для меня, чтобы это сделать. Обратите внимание, что на раскадровке у меня есть контроллер панели вкладок, установленный в качестве контроллера корневого представления (т. Е. У меня есть галочка рядом с «Исходный контроллер просмотра»). Код отменяет этот параметр, чтобы вместо этого выставить автономный контроллер входа в систему.
//Note that my storyboard file's name is "Main.storyboard"--here you put the name of the storyboard file WITHOUT The extension, which is why I just say "Main" here.
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
//On the storyboard, you must set the Storyboard ID of the Login View Controller to the name "LoginForm" that is used below, so the code can find the View Controller referred to
UIViewController *loginController = [storyboard instantiateViewControllerWithIdentifier:@"LoginForm"];
self.window.rootViewController = loginController;
В Входе контроллере, когда он готов уволить себя, потому что Войти был проверен как правильно, я называю метод в App Делегате как это:
//Be sure to import the App Delegate at the top with #import "AppDelegate.h"
AppDelegate *myAppDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[myAppDelegate showMainScreen];
В App Делегате , вот метод «showMainScreen». Обратите внимание, что я отклоняю контроллер входа в систему, который временно был установлен в качестве контроллера корневого представления, и вернул главный экран в качестве контроллера корневого представления.
- (void)showMainScreen {
[self.window.rootViewController dismissViewControllerAnimated:YES completion:nil];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UITabBarController *main = [storyboard instantiateViewControllerWithIdentifier:@"tabBarForm"];
self.window.rootViewController = main;
}
Еще один совет: Я хотел выскочить с экрана Войти каждый раз, когда приложение было сведено к минимуму в качестве меры безопасности, поэтому я вызываю метод applicationWillEnterForeground
в приложении делегата как способ обменять в контроллере авторизации каждый раз, когда он возникает:
- (void)applicationWillEnterForeground:(UIApplication *)application {
[self showLoginScreenIfNecessary];
}
Убедитесь, что «контроллер» не равен нулю, и вы указали идентификатор в StoryBoard. – kezi
«Контроллер» не равен нулю, а идентификатор в раскадровке правильный! – Tom