Короткий ответ, если вы получите от пользовательского интерфейса входа в основной интерфейс приложения, установив корень окна, тогда это хороший способ вернуться.
// in some view controller in your app when you need to change to the login UI
UIStoryboard *storyboard = [self storyboard];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"MyLoginVCIdentifier"];
UIWindow *window = [UIApplication sharedApplication].delegate.window;
window.rootViewController = vc;
Longer Ответ, я иногда использую контроллер представления, чья единственная работа заключается в управлении этим, назвав его LaunchViewController
.
В моей main.storyboard я создаю экземпляр LaunchViewController
и устанавливаю «Исходный контроллер просмотра» в true.
Этот VC не нуждается в пользовательском интерфейсе, так как это только работа, чтобы заменить себя, как только он появится. Однако, так как я не хочу даже доли секунды после вспышки моей LaunchScreen.storyboard, я иногда делаю это для наложения вида этого Vc с точкой зрения запуска раскадровки, но эта часть не является обязательной ....
// LaunchViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
UIStoryboard *storyboard = [self.class storyboardWithKey:@"UILaunchStoryboardName"];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"LaunchVC"];
[self.view addSubview:vc.view];
}
// a convenience method to get a storyboard from the bundle by key
+ (UIStoryboard *)storyboardWithKey:(NSString *)key {
NSBundle *bundle = [NSBundle mainBundle];
NSString *storyboardName = [bundle objectForInfoDictionaryKey:key];
return [UIStoryboard storyboardWithName:storyboardName bundle:bundle];
}
Возвращаясь к вашему вопросу, мой LaunchViewController обеспечивает, что представляет метод (с анимацией по вашему выбору) главный контроллер представления раскадровки данного это раскадровка идентификатор ...
// LaunchViewController.m
+ (void)presentUI:(NSString *)identifier {
UIStoryboard *storyboard = [self storyboardWithKey:@"UIMainStoryboardFile"];
UINavigationController *vc = [storyboard instantiateViewControllerWithIdentifier:identifier];
UIWindow *window = [UIApplication sharedApplication].delegate.window;
window.rootViewController = vc;
[UIView transitionWithView:window
duration:0.3
options:UIViewAnimationOptionTransitionCrossDissolve
animations:nil
completion:nil];
}
при том, что мы можем дать LaunchViewController
любое число общественных методов, таких как ...
+ (void)presentLoginUI {
[self presentUI:@"IdentifierOfMyLoginViewController"];
}
+ (void)presentMainAppUI {
[self presentUI:@"IdentifierOfMyMainAppViewController"];
}
Поскольку системное окно имеет единственный указатель на контроллер корневого представления, и вы заменяете этот указатель на presentUI:
, ARC очистит весь отброшенный пользовательский интерфейс для вас.
Это действительно отличный ответ. – SAHM