我有一个小问题。 在我的主视图控制器上,我获得了一个条形按钮,用于打开幻灯片菜单,这是一个使用幻灯片过渡的常规视图控制器。幻灯片菜单上有一个按钮可以打开另一个视图控制器。当打开新的视图控制器时,您可以选择取消,这将取消当前的视图控制器。问题是,用户再次出现在菜单视图中,而不是主视图控制器中。很高兴知道我在做什么错:)
func openSupport() {
guard let creditViewContoller = storyboard?.instantiateViewController(withIdentifier: "support") as? CreditViewController else { return }
present(creditViewContoller, animated: true)
}
@IBAction func buttonSupport(_ sender: UIButton) {
let menuView = MenuViewController()
menuView.dismiss(animated: true, completion: nil)
openSupport()
print("Tap on Support")
}
答案 0 :(得分:1)
您只需使用
即可关闭视图控制器self.dismiss(animated: true, completion: nil)
答案 1 :(得分:0)
考虑
@IBAction func buttonSupport(_ sender: UIButton) {
let menuView = MenuViewController() // (1)
menuView.dismiss(animated: true, completion: nil) // (2)
openSupport() // (3)
print("Tap on Support")
}
此:
MenuViewController
,但从不显示; dismiss
;和openSupport
实例调用MenuViewController
(从未关闭过)。最底下的是,您想让呈现菜单的主视图控制器进行呈现。因此,菜单视图控制器应:
为其定义一个协议,以通知正在呈现的视图控制器过渡到下一个场景:
protocol MenuViewControllerDelegate: class {
func menu(_ menu: MenuViewController, present viewController: UIViewController)
}
然后,菜单视图控制器关闭后,就可以告诉其委托者应该显示的内容:
class MenuViewController: UIViewController {
weak var delegate: MenuViewControllerDelegate?
@IBAction func didTapSupport(_ sender: Any) {
dismiss(animated: true) {
guard let controller = self.storyboard?.instantiateViewController(withIdentifier: "support") else { return }
self.delegate?.menu(self, present: controller)
}
}
@IBAction func didTapCancel(_ sender: Any) {
dismiss(animated: true)
}
}
然后,主视图控制器需要
确保设置菜单视图控制器的delegate
:
class ViewController: UIViewController {
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destination = segue.destination as? MenuViewController {
destination.delegate = self
}
}
}
和
确保提供菜单控制器要求它的视图控制器:
extension ViewController: MenuViewControllerDelegate {
func menu(_ menu: MenuViewController, present viewController: UIViewController) {
present(viewController, animated: true)
}
}
有很多实现此目的的方法,因此请不要在这里迷失方向。但想法是要有一个系统,菜单视图控制器可以通过该系统请求呈现support
视图的人这样做,而不是自己尝试。