1

开始新项目时仍然感到困惑。我有一个选项卡栏应用程序,其中包含许多选项卡以及与每个选项卡关联的导航控制器。

我需要在标签栏之前添加一个登录屏幕。还需要在用户登录一次时将用户带到标签栏。即,一旦用户登录,每次他被定向到标签栏,除非他注销。我需要选择一种模式。

  1. 创建一个登录屏幕并模态显示标签栏控制器,并在用户注销时关闭模态视图控制器。
  2. 当用户登录时将 window.rootViewController 更改为 tabbarcontroller,如果没有将 window.rootview 控制器设置为登录视图控制器。
  3. 在应用程序中确实完成启动,[window addSubview:tabcontroller.view] 然后 [window addSubview:loginviewcontroller.view] 并在用户成功登录时隐藏 loginviewcontroller
  4. 与我的选项 1 正好相反,如果用户未登录并在登录时关闭,则显示标签栏控制器并模态显示 loginview 控制器。

请选择我最好的选择或任何其他方式来做得更好。

4

1 回答 1

3
     **Changing the window.rootViewController to the tabbarcontroller
     when the user signs in and if not set the window.rootview controller 
     as the login view controller.** 

是做这件事的最好方法,最初如果用户没有登录,那么 LoginViewController 将是 RootViewController,否则 tabBarController 将是 RootViewController,当用户注销时,将 RootViewController 更改为 LoginViewController。

更新: 试试这个,这会奏效。如果不清楚,请告诉我,我将发送 ua 工作项目。

默认情况下,您的 Main Storyboard 中的 InitialViewController 会在您的应用启动时自动实例化并显示。为了防止这种情况发生,您需要从 info.plist 文件中删除 UIMainStoryboardFile 设置。

由于没有默认视图控制器,您现在可以在应用程序启动时以编程方式自由创建一个。

在这里,我在这一行下面写了一个小例子。创建两个没有 xib FirstViewController 和 SecondViewController 的视图控制器,并在 MainStoryboard_iPhone 和 Appdelegate.m 中添加比实现这些方法。

- (BOOL)应用程序:(UIApplication *)应用程序 didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

/*
 call any of the two methods below, it will change the RootViewController accordingly
 */

// [self firstRootViewController];  // make FirstViewController Root view controller
[self secondRootViewController];    // make SecondViewController Root view controller

self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;

}

-(无效)firstRootViewController {

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
FirstViewController *first = [sb instantiateViewControllerWithIdentifier:@"FirstViewController"];
[self.window setRootViewController:first];

}

- (void) secondRootViewController {

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
SecondViewController *second = [sb instantiateViewControllerWithIdentifier:@"SecondViewController"];
[self.window setRootViewController:second];

}

现在在 MainStoryboard_iPhone.storyboard 中设置 viewController

在此处输入图像描述

于 2013-10-24T12:44:07.187 回答