iPhone - 如何将导航控制器添加到视图?

Posted

技术标签:

【中文标题】iPhone - 如何将导航控制器添加到视图?【英文标题】:iPhone - how do I add a navigation controller to a view? 【发布时间】:2011-05-12 11:40:14 【问题描述】:

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

S:加载一个视图作为登录屏幕开始。

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

b:如果不成功,我添加一个注册表单作为子视图

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

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

不管结果如何,我希望能够从 ab 回到初始登录屏幕。

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

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,然后显示条款和条件视图,而不必将其添加为子视图,不是吗?

【问题讨论】:

【参考方案1】:

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

1.简单的方法:在模态视图中,在调用关闭的某些方法中添加:

[self.navigationControllerdismissModalViewControllerAnimated:YES];

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

Reference to this post

【讨论】:

对不起,我的意思是指定模式视图不是我想要的方式,因为我需要一个带有左侧箭头形状的后退按钮。【参考方案2】:

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

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

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];

【讨论】:

给出错误:在 appdel 中找不到属性控制器...那个控制器是什么? 是 UINavigationController。如果你不想扩展 AppDelegate 你可以这样做: HomeController *viewController = [[HomeController alloc] init]; UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController]; self.window.rootViewController = 导航控制器;

以上是关于iPhone - 如何将导航控制器添加到视图?的主要内容,如果未能解决你的问题,请参考以下文章

将右 barbuttonitem 添加到导航控制器 iphone sdk 后视图向上移动

将表格视图和导航控件添加到现有的基于视图的应用程序

如何导航到 iPhone 中的下一个视图控制器

在 iPhone 中使用模态视图将条形按钮添加到导航栏

如何将导航控制器添加到不是主视图的视图?

如何将导航控制器添加到 xib