ios - 我有多个 Storyboard。如何使用 AppDelegate 在另一个 Storyboard中打开另一个 ViewController? (继续)

标签 ios swift appdelegate

这是我的代码。我尝试了几种不同的方法,其中一些方法给出了 View 不在层次结构中的错误。

下面的代码片段在正确的 else 中,但不能执行 segue 或 presentViewController

func applicationDidTimout(notification: NSNotification) {
    if let vc = self.window?.rootViewController as? UINavigationController {
        if let myTableViewController = vc.visibleViewController as? AccountsOverviewViewController {
            // Call a function defined in your view controller.
            myTableViewController.signOffUser()
        } else {
            // We are not on the main view controller. Here, you could segue to the desired class. 
            let storyboard = UIStoryboard(name: "Accounts", bundle: nil)
            let vc = storyboard.instantiateViewControllerWithIdentifier("AccountsNavigationController") as UIViewController
            let vc2 = getVisibleViewController(nil)
            vc2?.presentViewController(vc, animated: true, completion: nil)

        }
    }
}

func getVisibleViewController(var rootViewController: UIViewController?) -> UIViewController? {

    if rootViewController == nil {
        rootViewController = UIApplication.sharedApplication().keyWindow?.rootViewController
    }

    if rootViewController?.presentedViewController == nil {
        return rootViewController
    }

    if let presented = rootViewController?.presentedViewController {
        if presented.isKindOfClass(UINavigationController) {
            let navigationController = presented as! UINavigationController
            return navigationController.viewControllers.last!
        }

        if presented.isKindOfClass(UITabBarController) {
            let tabBarController = presented as! UITabBarController
            return tabBarController.selectedViewController!
        }

        return getVisibleViewController(presented)
    }
    return nil
}

最佳答案

使用下面的函数来获取可见 View Controller ,

func getVisibleVC() -> UIViewController? {
  if var visibleVC = window?.rootViewController {
    while let presentedVC = visibleVC.presentedViewController {
      visibleVC = presentedVC
    }
    return visibleVC
  }
  return nil
}

关于ios - 我有多个 Storyboard。如何使用 AppDelegate 在另一个 Storyboard中打开另一个 ViewController? (继续),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36647078/

相关文章:

html - 如何使用正则表达式从 html 字符串中获取图像 url

ios - 使用 Xcode 9 和 AES 解密的 CryptoSwift

ios - 导航 Controller 定制不对应

ios - 调试器未进入 appDelegate

ios - view.removeFromSuperview() 很多水龙头的 fatal error

ios - 对与套接字相关的 iOS 内核 panic 进行分类

ios - 从 Objective-C 中的数组获取唯一对象集的最佳方法是什么

iphone - 如何在 iOS 中加载更大尺寸的 PDF?

swift - 设置多个变量的值

ios - 从 Testflight 打开按钮启动应用程序时崩溃