我有一个拆分视图控制器,主视图在导航栏上有一个“注释”按钮,该按钮应该将包含已保存笔记列表的视图(Note Gallery ViewController)推送到Detail View上。在以下屏幕截图中,“类别”是主视图,“事件列表”是详细视图。如您所见,“事件列表”和“注释库”之间存在一个区别。
当我点击主视图上的“注意”按钮时,我想要将“注释库”作为详细信息视图推送。到目前为止,我已尝试使用委托/协议方法,其中协议在主视图中定义,并在详细信息视图中实现。如果我调用self.performSegue来推送“Note Gallery”视图,“Note Gallery”视图不会显示导航栏(即使我强制它使用带有false值的setNavigationBarHidden显示)。如果我从导航控制器调用performSegue(self.navigationController?.performSegue),我得到标识符未找到异常。我不想将Note按钮移动到Detail视图,因为我想从主视图中访问Note按钮。我该如何解决这个问题,这里是我的代码的摘录:
/* Master View */
// Define delegate for updating children views
protocol ChildViewDelegate: class {
func pushInNoteView()
}
class MasterViewController: UITableViewController, NSFetchedResultsControllerDelegate {
weak var delegate: ChildViewDelegate?
// Handles tapping on Note button
@IBAction func noteTapped(_ sender: UIBarButtonItem) {
// Push Note View onto any active detailed view
self.delegate?.pushInNoteView()
}
}
/* Detail View */
extension CategoryDetailTableViewController: ChildViewDelegate {
func pushInNoteView() {
// This approach does not show navigation bar
self.performSegue(withIdentifier: "showNoteView", sender: self)
// This approach gives identifier not found exception
self.navigationController?.performSegue(withIdentifier: "showNoteView", sender: self)
}
}
答案 0 :(得分:0)
我认为问题是你没有在main.storyboard中为你的segue提供标识符。
Here is how to do it. 在你的main.storyboard中选择你的segue,如图所示,并在身份检查器中为它分配一个标识符,如图像的右上角所示。
现在创建导航控制器并制作"根视图控制器"与您的主视图的关系。然后使用performSegue(withIdentifier: "segue", sender: nil)
移动到下一个视图控制器。
希望我已经解决了你的问题!
答案 1 :(得分:0)
以下是我犯的错误:
我得到标识符未定义错误的原因是因为导航控制器和“注释库”视图之间没有连接segue。它连接在“Note Gallery”视图和“Category Detail”视图之间,后者又连接到导航控制器。因此,没有为导航控制器定义标识符。
隐藏导航栏的原因是因为我没有将“Note Gallery”视图推到导航控制器上。相反,我只是打电话给准备segue。
解决方案:
这很简单。我只需按下导航控制器上的“Note Gallery”视图:
if let noteVC = storyboard?.instantiateViewController(withIdentifier: "NoteGalleryView") {
self.navigationController?.pushViewController(noteVC, animated: true)
}