更改故事板导航视图控制器在应用程序打开时没有明显的转换。

时间:2013-05-07 12:15:20

标签: objective-c uistoryboard uistoryboardsegue

我有一个带有表格视图的基本ui导航视图,当用户选择一个名称并按下顶部栏的下一个按钮时,它应该转到主ui导航视图,在初始设置之后它应该在主视图控制器上启动什么是最好的方法呢?....

我目前有这个: enter image description here

我的最终目标是完成LoginNavController,它将“推送”到新的NavController,并且打开时总是直接进入新的NavController。我该如何以有效(和正确?)的方式做到这一点?

1 个答案:

答案 0 :(得分:0)

我不确定你的意思

  

我的最终目标是完成LoginNavController,它将“推送”到新的NavController,并且打开时总是直接进入新的NavController。我该如何以有效(和适当的?)的方式做到这一点?

如果您的意思是您只想显示登录视图一次,然后始终显示另一个视图控制器,一种可能的解决方案是使用模态segue到下一个导航控制器(由ID modalSegue标识)在我的代码片段中)。一旦登录视图控制器达到了目标,您就可以通过使用NSUserDefaults来保存它(这些在应用程序启动之间是持久的)。在登录视图控制器的viewWillAppear方法中,您可以检查相对键的值,如果已设置,则直接执行segue到其他导航视图控制器。它会是这样的:

-(void)viewWillAppear:(BOOL)animated
{
    NSNumber* result = [[NSUserDefaults standardUserDefaults] valueForKey:@"isSet"];

    if(result.boolValue)
        [self performSegueWithIdentifier:@"modalSegue" sender:self];
}

要在loginViewController完成后设置密钥,您可以执行以下操作:

-(void) setLoginCompleted
{        
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"isSet"];
}

编辑:为了获得更流畅的用户体验,您可以直接在didFinishLaunchingWithOptions:委托方法中设置应用程序窗口的rootViewController。在这种情况下,您可以执行以下操作:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    MyNavController *nav =  [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:@"myNavVC"];
    NSNumber* result = [[NSUserDefaults standardUserDefaults] valueForKey:@"isSet"];
    if(result.boolValue)
        [self.window setRootViewController:nav];
    return YES;
}