-2

我有这个故事板:

故事板

第二个视图控制器是登录屏幕。

我检查用户是否已经登录,如果是真的,我想跳过登录屏幕并转到 tableviewcontroller。而且,另一方面,当用户未登录时,显示登录视图,当用户登录时,我希望下一个视图成为导航堆栈中的第一个视图。

现在我将 tableview 设置为根元素,此代码在其他帖子中解释

NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]];
InitialViewController *nvc = [[InitialViewController alloc] init];
[viewControllers replaceObjectAtIndex:0 withObject:nvc];
[self.navigationController setViewControllers:viewControllers];

它可以工作,但是当我想单击一个生成详细视图的单元格时,它不起作用。如果我删除登录屏幕并将表格视图设置为导航控制器中的根,它可以工作。

有谁知道为什么?

其他跳过登录视图的方法表示赞赏

编辑: 有了这个解决方案,它可以工作了,现在我有两个导航控制器,我用这个代码从一个切换到另一个

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:[NSBundle mainBundle]];
InitialViewController *initial = [storyBoard instantiateViewControllerWithIdentifier:@"appRootController"];
AppDelegate *myAppDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
myAppDelegate.window.rootViewController = initial;

我不知道这是否是正确的解决方案,但它有效。

4

1 回答 1

7

我需要的正是你现在需要的。我所做的是一旦用户登录,我在NSUserDefaults. 然后在我的AppDelegate.m,我检查这些NSUserDefaults值以确定用户是否已经登录

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法

然后我将rootViewController设置为适当的视图控制器。当您使用情节提要时,我要做的是创建情节提要的实例,如下所示:

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"YourStoryBoardName" bundle:[NSBundle mainBundle]];

然后用于NSUserDefaults检查用户信息。

       // Check user login 
      if([[NSUserDefaults standardUserDefaults] valueForKey:@"AlreadyLogin"])
        {
          // So, here user already login then set your root view controller, let's say `SecondViewController``
          SecondViewController *secondViewController = [storyBoard instantiateViewControllerWithIdentifier:@"SecondViewController"];
          // then set your root view controller 
          self.window.rootViewController = secondViewController;
        }
    else
    {
         // It means you need to your root view controller is your login view controller, so let's create it 
         LoginViewController  *loginViewController= [storyBoard instantiateViewControllerWithIdentifier:@"LoginViewController"];
         self.window.rootViewController = loginViewController;
    }

不要忘记将您的视图控制器标识符设置为适当的值,然后不要忘记NSUserDefaults在用户注销时清除值。

于 2013-05-27T20:34:49.277 回答