如果用户已记录,则跳过视图

时间:2013-05-27 19:07:39

标签: iphone ios objective-c

我有这个故事板:

storyboard

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

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

现在我将tableview设置为root元素,并在其他帖子

中解释此代码
NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]];
InitialViewController *nvc = [[InitialViewController alloc] init];
[viewControllers replaceObjectAtIndex:0 withObject:nvc];
[self.navigationController setViewControllers:viewControllers];

它可以正常工作,但是当我想点击一个单元格进行细节视图时,它不起作用。如果我删除登录屏幕并将表视图设置为导航控制器中的root,它就可以工作。

任何人都知道为什么?

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

修改 有了这个解决方案,它有效,现在我有两个导航控制器,我用这个代码改变了一个

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

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

1 个答案:

答案 0 :(得分:7)

我需要的只是你现在所需要的。我做的是一旦用户登录,我在NSUserDefaults中设置了适当的值。然后在我的AppDelegate.m中,检查NSUserDefaults值以确定用户是否已登录

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

然后我将 rootViewController 设置为适当的视图控制器。当您使用故事板时,我要做的是创建一个storyBoard的实例,如下所示:

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值。