如何向 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 - 何时释放推送的视图控制器等