gpt4 book ai didi

ios - UISplitViewController 的详细 View 中缺少标题栏

转载 作者:搜寻专家 更新时间:2023-10-31 22:11:00 25 4
gpt4 key购买 nike

我在容器 View 中嵌入了一个 UISplitViewController(因为它不在我的应用程序的根目录中),除了一个问题外,它的机制运行良好:的导航栏iPad 上缺少详细 View 。

初始设置基本上如下:

  1. 在 IB 中,将一个 Split View Controller 拖到 Storyboard 上,这将创建一个 Split View Controller、一个 Navigation Controller、一个 Table View Controller(Master)、一个基本 View Controller(Detail)以及连接它们的 segue。<
  2. 添加一个带有容器 View 的常规 View Controller 。创建从容器 View 到 Split View Controller 的嵌入 Segue。
  3. 添加另一个从原型(prototype)单元格到细节 View Controller 的 segue,由主 Controller 中的以下代码支持:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.performSegue(withIdentifier: "showDetail", sender: nil)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showDetail" {
let destinationViewController = segue.destination as! DetailViewController
let path = self.tableView.indexPathForSelectedRow! as NSIndexPath
destinationViewController.selectedTrainingId = (self.itemList[path.row] as! MyListItem).id
}
}
  1. 添加数据。

正在将项目加载到主视图并选择详细信息。


这是它在 IB 中的样子(为了节省空间,我展示了 iPhone 布局,但关系无论如何都应该是可见的):

enter image description here

SO处理类似问题的答案很少。最接近的匹配项建议为详细 View 添加一个自己的导航 Controller 。我不明白为什么这是必要的,因为我相信它在 iPhone 上按预期工作的事实表明详细 View 使用与主(根) View 相同的导航 Controller 。但我试了一下。正如我所怀疑的,结果是最初显示了一个导航栏。但是一旦选择了一个项目,该栏就会消失。以下是设置。

enter image description here

在许多应用程序(消息、电子邮件、Skype 等)中,您可以看到单独的顶部栏用于主视图和详细 View 。虽然从技术上讲我的应用程序并不绝对需要两者,但它并不是很漂亮,尤其是带有彩色条。所以,问题是:如何获得详细 View 的导航栏

最佳答案

详细 View 需要自己的导航 Controller 才能在 iPad 上显示导航栏。因此,问题中的第二张图片显示了正确的设置,但细节 segue 需要指向导航 Controller 。

enter image description here

关键是获取详细 View 的句柄,以便设置所选项目的 id,这可以通过对原始代码进行小的更改来完成:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showDetail" {

// Destination View Controller
let destinationNavigationcontroller: UINavigationController! = segue.destination as! UINavigationController
let destinationViewController: DetailViewController! = destinationNavigationcontroller.topViewController as! DetailViewController

// Selected Row ID
let path = self.tableView.indexPathForSelectedRow! as NSIndexPath
destinationViewController.selectedId = (self.itemList[path.row] as! MyListItem).id
}
}

关于ios - UISplitViewController 的详细 View 中缺少标题栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45660039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com