如何从第 2 层向下建立 UINavigationController(而不是从 Delegate/RootController 层)

Posted

技术标签:

【中文标题】如何从第 2 层向下建立 UINavigationController(而不是从 Delegate/RootController 层)【英文标题】:how to establish UINavigationController from the 2nd level down (not from the Delegate/RootController level) 【发布时间】:2011-07-11 03:33:35 【问题描述】:

在以下情况下使用 UINavigationController 的代码是什么?

基础应用程序基于 XCode 4 模板“实用程序应用程序”,具有 MainView 和 FlipSideView 控制器(即 MainView 不使用 UINavigationController,但以模态方式打开 FlipSideview) 在反面视图中,我有一个 UITableView,用于执行配置设置 希望能够单击此 FlipSideview UITableView 的一行,然后使用 UINavigationController 概念,然后水平过渡到以编程方式生成的 UITableView,以便用户可以选择/更改值,然后一旦完成他们就可以单击左上角的 BACK BUTTON(UINavigationController 将提供) 关于 XIB 文件,总体而言,MainView 和 FlipSideView 将有一个 XIB 文件(来自模板),但以编程方式生成的“选择值”视图不会有一个

所以我实际上不确定在这种情况下在哪里/如何创建/保存/使用 UINavigationController?这里的代码会是什么样子,UINavigationController 变量会保存在哪里,FlipSideView XIB 是否需要修改?

PS。事实上,FlipSideview 本身是否必须更改以在顶部合并导航栏? (然后我必须将现有模板的 DONE 按钮从它的导航栏调整到新的 UINavigationController 导航栏)

PSS。尝试这个但得到一个错误:

- (void)viewDidLoad

    [super viewDidLoad];
    self.uiNavController = [[UINavigationController alloc] initWithRootViewController:self];
    self.navigationController = self.uiNavController; 
    // ==> error: object cannot be set - either readonly property or no setter found

【问题讨论】:

如果我很清楚你的问题,那么你想添加一个导航控制器,而不是来自应用程序委托,而是来自任何其他视图控制器,我对吗? 【参考方案1】:

为此,您的 FlipSideViewController 本身应该实现 UINavigationControllerDelegate。

如何显示 FlipSideView?

FlipSideViewController *flipSideView = [[FlipSideViewController alloc] init..];
[self presentModalViewController:flipSideView animated:YES];
[flipSodeView release]; 

像这样????

然后你让你把它改成

FlipSideViewController *flipSideView = [[FlipSideViewController alloc] init..];
UINavigationController *uiNavController = [[UINavigationController alloc] initWithRootViewController:flipSideView];
[self presentModalViewController:uiNavController animated:YES];
[flipSideView release]; 
[uiNavController release];

【讨论】:

【参考方案2】:

UINavigationControllers 被设计为您的层次结构的根视图控制器。

因此,在您的示例中,您应该让 FlipSideViewController 持有一个 UINavigationController 并隐藏 NavigationBar。然后,您可以将 TableViewController 作为“根”视图推送到堆栈中。

当用户点击表格视图中的单元格时,您可以实例化一个新视图并将其推送到 self.navigationController 的堆栈中。确保将代码添加到新视图的 viewWillAppear 方法以显示导航栏,并将代码添加到 viewDidDisappear 以再次隐藏导航栏。

【讨论】:

以上是关于如何从第 2 层向下建立 UINavigationController(而不是从 Delegate/RootController 层)的主要内容,如果未能解决你的问题,请参考以下文章

如何始终在新页面中开始段落?

如何在 UINavigation 中显示 UISearchBar?

如何设置 UINavigation 大小以适合背景图像大小?

使用 UINavigation 保存后如何返回?

在两个 UITableView 之间转换时如何模仿 UINavigation 动画行为

如何将按钮添加到 UINavigation 项?