ios - 从弹出 ViewController Swift 继续

标签 ios swift uiviewcontroller popup segue

我有一个带有 7 个屏幕的应用程序 (VC),它们嵌入在导航 Controller 中。

我有一个独立的 VC,它不是嵌入式的。此 VC 的行为类似于自定义弹出窗口 class PopupView: UIViewController {} 并通过使用自定义 segue(在 Storyboard 中设置为自定义 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。

我现在拥有的:

  • 在 Storyboard中将所有 6 个屏幕连接到 VC4,带有 segues id

  • 尝试了performSegue(withIdentifier: "toVC4")present(vc, animated: true, completion: nil)

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

  • 在VC1中使用协议(protocol)调用func失败。

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

最佳答案

你可以在弹出按钮的 Action 中尝试这个

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 
   }
}

关于ios - 从弹出 ViewController Swift 继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52344883/

相关文章:

ios - 为什么GeoFire的函数getLocationForKey会被超越?

ios - Swift:去除 Spritekit 中不同场景的广告

swift - 创建字典类型别名的正确方法是什么?

swift - 使用未声明的类型 'MainGameScreenViewController'

ios - 如何以编程方式在 Swift 中创建新的 UIViewController

ios - 将 NSString 转换为日期

ios - 静态计算变量被多次实例化

objective-c - NSDictionay 总是返回 nil

iphone - 支持多界面,但主屏幕只有单一界面,在 iOS8 + iPhone 中不工作

css - 移动 safari 中的背景图片不够平铺