簡體   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