我正在使用侧视图控制器设置:https://github.com/edgecase/ECSlidingViewController
使用标识符为“InitialViewController”的storyboard加载初始View Controller。
一旦加载到viewDidLoad中,我会检查用户是否使用以下命令登录:
UIStoryboard *storyboard;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
} else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil];
}
if (![PFUser currentUser]){
self.topViewController = [storyboard instantiateViewControllerWithIdentifier:@"WelcomeVC"];
} else {
self.topViewController = [storyboard instantiateViewControllerWithIdentifier:@"HomeVC"];
}
根据以上所述,如果用户未登录,则加载WelcomeVC。 WelcomeVC是一个导航控制器,其中包含3个Vc。欢迎/登录/注册。
一旦用户登录,我需要将topViewController(如上所述)更改为HomeVC。如果可能,可以取消称为WelcomeVC的导航控制器。 如何更改此topViewController我已经尝试过这个但它不起作用:
UIStoryboard * storyboard;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
} else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil];
}
self.EVC = [storyboard instantiateViewControllerWithIdentifier:@"InitialViewController"];
self.EVC.topViewController = [storyboard instantiateViewControllerWithIdentifier:@"HomeVC"];
答案 0 :(得分:1)
就个人而言,我喜欢从一开始就让主屏幕成为根视图控制器,让viewDidAppear
通过非动画模式segue自动将我带到登录界面(我更喜欢{{1}故事板的segues显示整个流程,而不是手动实例化控制器并调用performSegueWithIdentifier
,但任何适用于你的东西)。然后,我成功登录后,只需关闭回主屏幕即可。这样,我不需要改变顶级控制器。
所以我的故事板看起来像:
所以我的主“家庭”视图控制器具有以下pushViewController
:
viewDidAppear
显然,您确定自己是否已登录的逻辑会有所不同,但您明白了。我的登录在登录屏幕上进行了模态segue(没有动画),我碰巧在登录界面系列中使用了导航控制器。
我最后一次成功的登录过程就是:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if (![[Model sharedManager] loggedIn])
[self performSegueWithIdentifier:@"login" sender:self];
}
答案 1 :(得分:0)
在application:didFinishLaunchingWithOptions:中,我检查用户是否已经登录,如果是,我跳转到配置文件:
-(void)goToProfile {
UIStoryboard *storyboard = self.window.rootViewController.storyboard;
UINavigationController *rootNav = [storyboard instantiateViewControllerWithIdentifier:@"MainNavigationController"];
if (![self.window.rootViewController isKindOfClass:[rootNav class]]) {
self.window.rootViewController = rootNav;
}
else {
[(UINavigationController *)self.window.rootViewController popToRootViewControllerAnimated:YES];
}
}
didFinishLaunchingWithOptions不需要其他任何内容。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
if ([self isLoggedIn]) {
[self goToProfile];
}
else {
NSLog(@"Not logged in");
}
return YES;
}
在我的故事板中,主分支进入注册过程,登录视图的导航控制器的故事板ID为MainNavigationController。