如何从第 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 大小以适合背景图像大小?