我目前有一个执行以下操作的应用程序:
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,然后显示条款和条件视图,而不必将其添加为子视图,不应该吗?
答案 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.更复杂的方式:在模态视图上实现和委托协议,并使视图控制器呈现模态视图的委托。并且在委托方法中关闭模态视图。当我需要将模态视图中的数据发送到呈现它的控制器时,我这样做。