繁体   English   中英

Swift 返回预览 UINavigationController

[英]Swift return to preview UINavigationController

我的 VC 就像“出了点问题”。 我创建的这个 VC 就像一个单独的 VC(没有故事板),我想在我想要的地方展示它。 但是在“出了点问题”视图 Controller 我有一个按钮“刷新”。 当用户单击此按钮时,他必须返回 go。

当我在解析 Json 或类似的东西时遇到问题时,我会打电话给出错了”查看 Controller 像这样:

let navController = UINavigationController()

        navController.pushViewController(SomethingWentWorngVC(nibName: "SomethingWentWorngView", bundle: nil), animated: false)

        window?.rootViewController = navController
        window?.makeKeyAndVisible()

我也有扩展获取window

extension UIViewController {
     var appDelegate: AppDelegate {
     return UIApplication.shared.delegate as! AppDelegate
 }
 
 var sceneDelegate: SceneDelegate? {
     guard let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
         let delegate = windowScene.delegate as? SceneDelegate else { return nil }
      return delegate
 }
}

extension UIViewController {
 var window: UIWindow? {
     if #available(iOS 13, *) {
         guard let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
             let delegate = windowScene.delegate as? SceneDelegate, let window = delegate.window else { return nil }
                return window
     }
     
     guard let delegate = UIApplication.shared.delegate as? AppDelegate, let window = delegate.window else { return nil }
     return window
 }
}

SomethingWentWorngVC中,我有 go 的按钮返回

@IBAction func refreshAction(_ sender: Any) {
    self.navigationController?.popToRootViewController(animated: false)

}

但它不起作用

以这种替代方式,您可以使用它,最初您需要使用标签在 appdelegate 中创建公共代码,然后您需要对 window 执行 addsubview,例如,

作秀

func showWentWrongScreen(){
        let getVC = SomethingWentWorngVC
                      if let getWindow = self.window {
                          getVC.view.tag = 501
                          getVC.view.frame = getWindow.bounds
                          getWindow.addSubview(getVC.view)
                      }
    }

删除

func removeWentWrongScreen(){
    if let getWindow = self.window, let getWentWrongView = getWindow.viewWithTag(501){
        getWentWrongView.removeFromSuperview()
    }
}

现在您可以在需要的地方使用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM