2017-05-17 2 views
1

Ich habe derzeit die folgende Funktion innerhalb meiner Hauptansicht Controller (View Controller A).Swift Present View Controller von einer anderen Ansicht Controller

func myAction() {  
    let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main) 
    let viewControllerC : UIViewController = mainStoryboard.instantiateViewController(withIdentifier: "ViewControllerC") as UIViewController 

    self.present(viewControllerC, animated: false, completion: nil) 
} 

Wenn View Controller A gerade angezeigt wird und myAction wird viewControllerC funktioniert gut und Displays genannt. Diese Funktion myAction kann grundsätzlich jederzeit aufgerufen werden. Manchmal sogar wenn View Controller A nicht der aktuelle View-Controller auf dem Bildschirm ist. Manchmal, wenn View Controller B angezeigt wird, wird diese Funktion immer noch aufgerufen. Es wird gut genannt. Aber es lädt viewControllerC in diesem Fall nicht.

Ich habe auch die folgenden Gedanken versucht, die von was auch immer der aktive Ansicht Controller angezeigt wird. Aber das hat auch nicht funktioniert.

self.view.window?.rootViewController?.present(viewControllerC, animated: false, completion: nil) 

Wie kann ich es bekommen viewControllerC anzuzeigen, wenn myAction egal genannt wird, welche View-Controller gerade angezeigt wird?

+3

Viele Ideen, die hier über die Top-View-Controller bekommen (http://stackoverflow.com/questions/26667009/get-top-most-uiviewcontroller) – danh

+0

@danh Perfekt! Ich habe die akzeptierte Antwort verwendet und das scheint zu funktionieren! Vielen Dank. –

Antwort

0

müssen Sie die Top-Viewcontroller zu erhalten, die Verwenden Sie diesen Code für das Erhalten oben Viewcontroller in Anwendung derzeit sichtbar sind

extension UIApplication { 
    class func topView(controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? { 
     if let navController = controller as? UINavigationController { 
      return topViewController(controller: navController.visibleViewController) 
     } 
     if let tabController = controller as? UITabBarController { 
      if let selected = tabController.selectedViewController { 
       return topViewController(controller: selected) 
      } 
     } 
     if let presented = controller?.presentedViewController { 
      return topViewController(controller: presented) 
     } 
     return controller 
    } 
} 
+0

Wo kann ich diesen Code einfügen? –

+0

können Sie einen neuen Klassennamen UIApplication + Extension erstellen und den Code darin einfügen .. Sie können diese Methode in der gesamten Anwendung aufrufen. Eg. UIApplication.topView() – Optimus

+0

Beantwortet diese Antwort Ihr Problem mit einem effizienten Weg? – Optimus

Verwandte Themen