iPhone - 为不同类型的视图/窗口设置应用程序导航的正确方法是什么?

时间:2011-04-18 10:03:32

标签: iphone view navigation

作为objective-c和IOS的新手,我发现最困难的事情之一是如何在应用程序的各个阶段加载新视图并在我想要显示给用户之间移动。

我已经开始创建一个应用程序,底部有一个Tab Bar控制器,顶部有一个导航栏,我已经掌握了这个,以及如何为每个标签栏项加载不同的视图。

但是我想扩展应用程序,以便发生以下情况,

用户加载应用程序,首先出现普通登录屏幕,如果用户输入正确的详细信息,应用程序将移动到我当前设置的标签栏和导航栏,如果他们输入错误的详细信息,则会转到明确的错误页面。

所以我不确定在我的应用程序中需要更改什么来实现这一点,我是否需要创建一个新窗口并在其中为登录屏幕添加一个视图,然后如何加载我当前的设置? / p>

我是否将主界面更改为新窗口?或者我是否必须更改当前的MainWindow.xib以加载登录视图,然后在另一个xib文件中重新创建当前设置?

2 个答案:

答案 0 :(得分:1)

通常我们只能在iPhone SDK中使用一个UIWindow。因此我们必须通过一个UIWindow来处理所有事情。您可以在AppDelegate.m文件中使用以下代码。当用户单击登录按钮时,您可以删除登录页面和显示标签栏控制器

- (void)applicationDidFinishLaunching:(UIApplication *)application {    

// Override point for customization after app launch    
     [window addSubview:viewController.view];// you log in page
     [window addSubview:tabController.view];//Your Tab bar controller
[window makeKeyAndVisible];

}

-(IBAction)Login_buttonClicking
{
[viewController.view removeFromSuperview];
}

答案 1 :(得分:1)

您可能已经知道,视图通常由UIViewController的相应子类管理。他们可以通过多种方式表达自己的观点,例如modal(新视图向上滑动并覆盖上一个视图),在UITabBarController的选项卡中或作为具有UINavigationController的导航hirachy的一部分。 关于你的情况,我建议加载你的标准标签栏控制器,让它以模态方式显示你的登录视图。当用户按下登录按钮时,模态视图将被关闭并向下滑动以显示标签栏控制器中的实际内容:

- (void)applicationDidFinishLaunching:(UIApplication *)application {

    LoginViewController *loginViewController = [[LoginViewController alloc] init];
    [tabBarController presentModalViewController:loginViewController animated:NO];
    [loginViewController release];

    [window addSubview:tabBarController.view];
    [window makeKeyAndVisible];
}

然后,LoginViewController中的Login按钮必须调用:

- (void)loginSuccessful {
    [self.parentViewController dismissModalViewController];
}

此解决方案使应用程序启动时登录屏幕覆盖标签栏控制器视图,并在用户登录时将其向下滑出屏幕。