如何在不丢失导航栏的情况下将子视图添加到 UINavigation 控制器?

Posted

技术标签:

【中文标题】如何在不丢失导航栏的情况下将子视图添加到 UINavigation 控制器?【英文标题】:How to add a subview to a UINavigation Controller without losing navigation bar? 【发布时间】:2012-03-24 02:18:22 【问题描述】:

我有一个 SplitViewController,它有两个 UITableViewControllers - 一个主/根一个细节。一切都很顺利。

在用户选择根视图控制器中的项目之前,我有一个 UIView 显示在详细视图控制器上。它是这样设置的:

[self.navigationController.view addSubview:makeSentenceHelperView];
[self.navigationController.view bringSubviewToFront:makeSentenceHelperView];

detailViewController 是这样设置的:

UINavigationController *detailNav = [[[UINavigationController alloc] initWithRootViewController:detailViewController] autorelease];

detailViewController 是 UITableView 的子类。

问题是这个子视图从细节视图控制器的导航栏中隐藏了按钮和导航栏 - 当您以纵向模式启动 SVC 时,这是一个问题(无法使用根弹出窗口选择根项目)。

如何在导航控制器中呈现视图,以便导航栏和按钮出现在详细视图中?

【问题讨论】:

为什么不默认在主视图中显示第一项的详细信息? 因为当用户第一次开始使用该应用程序时,他们不会在表格中显示任何内容 - 我想向他们展示如何轻松上手。 那么为什么不考虑像 Pulse 新闻和许多其他应用一样使用应用指南之类的东西。 感谢您的建议,但对于我的目标用户,我认为这种方式效果最好。 【参考方案1】:

不要让detailViewController 成为 UIView 的子类,而是使用 UIViewController。所以你的splitView 数组将包含UINavigationController(rootVC) 和UIViewController (detailVC) 的其他实例。

detailViewController 的顶部添加一个工具栏,在横向模式下,左侧将被rootVC 的 UITableView 覆盖,您将能够看到工具栏,您可以在其右侧添加一些按钮(可能用作导航栏.. :) 。其余的事情可以由UISplitViewControllerDelegate处理。

【讨论】:

【参考方案2】:

为了解决这个问题,我向助手 UIView 添加了一个 UINavigationController,并添加了一个 UIButtonBarItem 来调用弹出框以在主视图中选择一个新项目。回想起来似乎真的很简单。唯一棘手的一点是让 UIButtonBarItem 在横向时隐藏。

【讨论】:

以上是关于如何在不丢失导航栏的情况下将子视图添加到 UINavigation 控制器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不从当前活动选项卡中获取焦点的情况下将子窗口添加到 QMdiArea(设置为 TAB 模式)?

如何在编辑模式下将子视图添加到 UITableViewCell 并调整其大小?

如何在不重新索引的情况下将项目添加到 laravel 列表集合中?

如何在不丢失原始参与者的情况下将现有呼叫升级到会议?

如何将子视图添加到 UIViewController 将 UINavigationBar 推到后面

如何在不使用服务的情况下将子组件之间的反应式表单数据传递给父组件