基于iOS应用程序的Design View Hierarchy Tabbar bar

时间:2013-10-24 12:37:00

标签: ios iphone objective-c ios7

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

我需要在tabbar之前添加一个登录屏幕。登录时,还需要将用户带到tabbar。即,一旦用户登录,每次他被指向tabbar,除非他退出。我需要选择一种模式。

  1. 创建登录屏幕并以模态方式显示标签栏控制器,并在用户注销时关闭模式视图控制器。
  2. 当用户登录时将window.rootViewController更改为tabbarcontroller,如果没有将window.rootview控制器设置为登录视图控制器。
  3. 在应用程序中完成启动,[window addSubview:tabcontroller.view] 然后[window addSubview:loginviewcontroller.view]并在用户成功登录时隐藏loginviewcontroller
  4. 与我的选项1相反,显示标签栏控制器,如果用户未登录则以模态方式显示loginview控制器,并在登录时解除。
  5. 请选择我最好的选择或任何其他方式来做得更好。

1 个答案:

答案 0 :(得分: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。

更新:试试这个,这样可行。如果不清楚,请告诉我,我会发送一个工作项目。

  

主故事板中的默认初始化控件是   应用程序启动时自动实例化并显示。至   防止这种情况发生,你需要删除UIMainStoryboardFile   从info.plist文件设置。

     

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

这里我在这一行下面写了一个小例子。创建两个没有xib FirstViewController和SecondViewController的视图控制器,并在MainStoryboard_iPhone和In 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;

<强>}

- (void)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

enter image description here