在Storyboard中加载ViewControllers

时间:2013-04-15 21:33:05

标签: ios ios5 uiviewcontroller storyboard uistoryboard

我正在使用侧视图控制器设置: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"];

2 个答案:

答案 0 :(得分:1)

就个人而言,我喜欢从一开始就让主屏幕成为根视图控制器,让viewDidAppear通过非动画模式segue自动将我带到登录界面(我更喜欢{{1}故事板的segues显示整个流程,而不是手动实例化控制器并调用performSegueWithIdentifier,但任何适用于你的东西)。然后,我成功登录后,只需关闭回主屏幕即可。这样,我不需要改变顶级控制器。

所以我的故事板看起来像:

enter image description here

所以我的主“家庭”视图控制器具有以下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。 my storyboard