如何向 UINavigationController 添加一个在任何子视图上方可见的视图

Posted

技术标签:

【中文标题】如何向 UINavigationController 添加一个在任何子视图上方可见的视图【英文标题】:How to add a view to UINavigationController that is visible above any child view 【发布时间】:2016-08-01 15:48:17 【问题描述】:

我正在创建一个在 UITableView 中显示数据的应用。这个数据还包含位置信息,所以我想添加一个 MapView 来显示这个数据。当用户点击 UITableViewCel 时,我需要转到另一个 UITableView 以显示详细数据。我仍然希望在此详细数据上方显示具有相同数据的 MapView,并且我仍然希望 NavigationBar 更新,即后退按钮将用户返回到第一个 UITableView。

以图片形式,便于理解

我正在考虑创建 UINavigationController 的子类并将容器放在 MapView 下方,但我真的不知道从那里去哪里。

【问题讨论】:

你把mapView和tableView放到UIViewController下面了吗? 您可以在 viewdidload 方法中使用 self.title 执行此操作,并使用 prepareforsegue 方法将数据传递给您的第二个 vc。 是的,但是我希望能够从第一个 TableView 切换到第二个,同时仍然使用相同的 MapView 并能够使用 NavigationBar 返回到第一个 TableView。 如何在第一个视图中显示数据,使用任何模型还是仅使用字符串数组。 是一个数组,从模型中获取。 【参考方案1】:

在导航控制器或 UINavigationController 子类中嵌入 VC0。创建一个 Info ViewController 并将其推送到导航控制器上。

在您的特定情况下,您需要使用 UITableViewDelegate 中的 didSelectRowAt 方法。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
  // use indexPath.section and indexPath.row to use your data
  let infoVC = yourInfoViewController()
  infoVC.title = "Info Cell Name"
  navigationController?.pushViewController(infoVC, animated: true)


在第一条评论后编辑:

我不确定这样做的最佳方法是什么,但您可以这样做的一种方法是:

根据显示的内容修改表格视图,即:第一组数据或单元格详细数据 根据您显示的数据集更新导航栏的标题和左侧栏按钮 其中一个按钮只会出现在单元格详细信息数据集中,它会将您的开关设置回显示第一组数据

【讨论】:

但是我想继续使用相同的地图视图,所以我不必实例化一个新的。

以上是关于如何向 UINavigationController 添加一个在任何子视图上方可见的视图的主要内容,如果未能解决你的问题,请参考以下文章

将 managedObjectContext 发送到 viewController 崩溃

ID:[...] 的 NSManagedObject 已失效

在 UINavigationController 中设置时图像不显示

UINavigationController - 何时释放推送的视图控制器等

使用 UINavigationController 从另一个控制器更新或重新加载 UIViewController?

为啥我似乎必须在 iOS 应用程序委托中键入 window.rootViewController?