iPhone - 如何在视图中添加导航控制器?

时间:2011-05-12 11:40:14

标签: iphone ios uiview uinavigationcontroller uinavigationbar

我目前有一个执行以下操作的应用程序:

S:将视图作为登录屏幕加载。

a:如果登录成功,我将条款和条件屏幕添加为子视图

b:如果不成功,我会将注册表单添加为子视图

F:然后我将应用程序的主要部分加载到a或b中的任何一个成功,这是应用程序的一部分,其中有导航控制器和标签栏控制器。这是在MainWindow.xib中设置的

S a b 也有导航栏但没有导航控制器,因为我认为我不需要导航控制登录屏幕。

然而事实证明,我希望能够从 a b 返回导航到初始登录屏幕。

我尝试了几种方法,包括尝试以下答案:

How to add navigation controller in View Based Application in iPhone?

How do you properly set up a secondary view to support a navigation Controller on the iPhone?

how to add navigation controller programatically?

但它们都不适合我,它们会在登录屏幕上显示新的导航控制器,并且不会加载a或b屏幕。

我猜这是因为我将它们作为子视图添加到我的loginView中,这不是正确的方法吗?我的代码如下:

 if(self.tcSubViewController == nil){

        TCSubViewController *_tcSubViewController = [[TCSubViewController alloc] initWithNibName:@"T&CView" bundle:[NSBundle mainBundle]];

        self.tcSubViewController = _tcSubViewController;

        [_tcSubViewController release];

    }
 [self.view addSubview:[tcSubViewController view]];

我猜我的登录方式有一个根本性的缺陷?我应该能够完全删除LoginView,然后显示条款和条件视图,而不必将其添加为子视图,不应该吗?

2 个答案:

答案 0 :(得分:3)

导航控制器的理念是,您只需将navigationController.view添加为UIWindow子视图,它将自行管理其余部分。您只需要按下/弹出viewControllers,它们就会自动在屏幕上添加/删除相应的视图。

我当前应用程序的示例代码:

HomeController *homeController = [[[HomeController alloc] init] autorelease];
self.controller = [[[UINavigationController alloc] initWithRootViewController:homeController] autorelease];
self.controller.navigationBarHidden = YES;
[self.window addSubview:self.controller.view];
[self.window makeKeyAndVisible];

然后按下一个视图,你只需添加下一个控制器:

[self.navigationController pushViewController:newController animated:YES];

答案 1 :(得分:3)

您需要关闭导航控制器才能返回。 要取消模态视图:

1.Easy方式:在你的模态视图中,你调用dismiss只是添加:

[self.navigationController dismissModalViewControllerAnimated:YES];

2.更复杂的方式:在模态视图上实现和委托协议,并使视图控制器呈现模态视图的委托。并且在委托方法中关闭模态视图。当我需要将模态视图中的数据发送到呈现它的控制器时,我这样做。

Reference to this post