点击时查看导航控制器堆栈中的弹出窗口
View pops from navigation controller stack when tapped
我有一个弹出视图,它只是一堆 UIButton。
弹出窗口是从视图控制器 (Records) 呈现的,它本身位于 NavigationController 中。
我需要弹出视图中的按钮能够将其他视图推送到导航堆栈的顶部。
以下是我如何在 Records 视图控制器中为弹出框准备 segue:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "popoverSegue" {
let dest = segue.destination as! PopoverViewController
dest.navController = navigationController
dest.modalPresentationStyle = .popover
dest.popoverPresentationController?.barButtonItem = addButton
dest.popoverPresentationController?.delegate = self
}
}
然后在 popoverViewController 中,我得到了一堆 IBAction 函数,我需要在其中将其他视图推送到上面设置的 navController
之上。
let editor = EditorViewController(nibName: "EditorViewController", bundle: nil)
navController?.pushViewController(editor, animated: true)
这个 kina 有效,编辑器视图显示了一个导航栏和所有内容,但只要我点击视图或尝试滚动,它就会被关闭。
我怎样才能防止被解雇?我确实尝试设置 isModalInPresentation
。它对我不起作用。
正在回答,根据 OP 的评论...
正确的方法是让您的“弹出窗口”控制器告诉 presenting 控制器将新的 VC 推送到导航堆栈。
这可以通过几种不同的方式完成,但最常见的是使用 protocol/delegate 模式或使用闭包。
我有一个弹出视图,它只是一堆 UIButton。
弹出窗口是从视图控制器 (Records) 呈现的,它本身位于 NavigationController 中。
我需要弹出视图中的按钮能够将其他视图推送到导航堆栈的顶部。 以下是我如何在 Records 视图控制器中为弹出框准备 segue:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "popoverSegue" {
let dest = segue.destination as! PopoverViewController
dest.navController = navigationController
dest.modalPresentationStyle = .popover
dest.popoverPresentationController?.barButtonItem = addButton
dest.popoverPresentationController?.delegate = self
}
}
然后在 popoverViewController 中,我得到了一堆 IBAction 函数,我需要在其中将其他视图推送到上面设置的 navController
之上。
let editor = EditorViewController(nibName: "EditorViewController", bundle: nil)
navController?.pushViewController(editor, animated: true)
这个 kina 有效,编辑器视图显示了一个导航栏和所有内容,但只要我点击视图或尝试滚动,它就会被关闭。
我怎样才能防止被解雇?我确实尝试设置 isModalInPresentation
。它对我不起作用。
正在回答,根据 OP 的评论...
正确的方法是让您的“弹出窗口”控制器告诉 presenting 控制器将新的 VC 推送到导航堆栈。
这可以通过几种不同的方式完成,但最常见的是使用 protocol/delegate 模式或使用闭包。