[英]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.