从弹出视图控制器 Swift 中转接

Posted

技术标签:

【中文标题】从弹出视图控制器 Swift 中转接【英文标题】:Segue from popup ViewController Swift 【发布时间】:2018-09-15 12:53:02 【问题描述】:

我有嵌入导航控制器的 7 个屏幕 (VC) 的应用程序。

我有一个未嵌入的单独 VC。这个 VC 的行为类似于自定义弹出窗口 class PopupView: UIViewController ,并通过使用自定义 segue(在情节提要中设置为自定义 segue)从我的应用程序中的每个屏幕上按下按钮来调用:

open class MIBlurPopupSegue: UIStoryboardSegue 

open override func perform() 
    MIBlurPopup.show(destination, on: source)
 

在这个弹出窗口中,有一个按钮应该打开另一个嵌入在导航堆栈中的 VC(VC 始终相同)。

我想要实现的是通过按下 Popup VC 中的按钮实际打开导航堆栈内的 VC,然后返回调用 Popup 的屏幕。

因此,用户旅程看起来像 - 打开 VC1(2,3,5,6,7) -> 调用弹出式 VC -> 按下按钮 -> 打开 VC4 -> 按下导航返回按钮 -> 返回到 VC1。

我现在拥有的:

在情节提要中将所有 6 个屏幕连接到 VC4,并带有 segues id

试过performSegue(withIdentifier: "toVC4")present(vc, animated: true, completion: nil)

let storyboard = UIStoryboard(name: "MyStoryboardName", bundle: nil) let controller = storyboard.instantiateViewController(withIdentifier: "VC4") self.present(controller, animated: true, completion: nil)

在 VC1 中使用协议调用 func 但失败。

我肯定遗漏了一些东西,如果有人能提供代码示例来解决这个问题,我将不胜感激。

【问题讨论】:

【参考方案1】:

您可以在弹出按钮的操作中尝试此操作

self.dismiss(animated:true) 
   if let nav = UIApplication.shared.keyWindow?.rootViewController as? UINavigationController 
      let vc1 = storyboard!.instantiateViewController(withIdentifier: "MenuId")
      let finalVC = storyboard!.instantiateViewController(withIdentifier: "finalId")
      nav.setViewControllers([vc1,vc4],animated:true) // set it to false if you want 
   

【讨论】:

感谢您的及时答复。试过了,但没有运气,虽然 print() 里面如果被调用 你能展示你尝试过的最新代码和故事板的屏幕截图吗? @IBAction func didPressAuthors(_ sender: UIButton) dismiss(animated: true) if let nav = UIApplication.shared.keyWindow?.rootViewController as? UINavigationController let vc1 = MenuViewController() let finalVC = AuthorsViewController() print("Inside dissmiss") nav.setViewControllers([vc1, finalVC], animated: true) 这就是我的按钮中的内容。它得到了呈现,但有滞后,只是黑屏,顶部有导航栏。如果返回 - 在标签处以 nil 崩溃 发现了这个方法的一个bug或者缺点:访问VC4后返回,导航栏返回按钮消失,有什么想法吗? 因为这里只有VC1

以上是关于从弹出视图控制器 Swift 中转接的主要内容,如果未能解决你的问题,请参考以下文章

如何从弹出视图中关闭第二个视图控制器

从弹出框 VC 中返回第一个视图控制器

从弹出的视图控制器传递数据

从弹出框控制器调用模态视图的方法

从弹出框呈现模态视图控制器

如何从弹出视图控制器获取数据到自定义表格视图单元格?