2016-11-02 2 views
1

Mein Übergang in die nächste Ansicht ist wie folgt:presentViewController hat keine Navigation rasche

if let navigationController = navigationController { 
     if let storyboard:UIStoryboard = UIStoryboard(name: "myStoryboard", bundle: nil) { 

      if let vc = storyboard.instantiateViewControllerWithIdentifier("myViewController") as? MyViewController { 
       dispatch_async(dispatch_get_main_queue()) { 
        navigationController.presentViewController(vc, animated: true, completion: nil) 
       } 
      } 
     } 
    } 

Dies funktioniert gut. Ich möchte diese Art von Übergang. Aber wenn ich in MyViewController folgenden Code aufrufen, wird die Navigation nil:

if let navigationController = navigationController { 
     print("yeah i have a nc") 
    } else { 
     print("its nil") //this will call 
    } 

Wenn ich navigationController.pushViewController(vc, animated: true) alles funktioniert. Aber ich möchte wirklich den Übergang. Ist das eine falsche Umsetzung auf meiner Seite oder ist presentViewController immer ohne einen navigationController? Wenn ja, was kann ich tun?

Mein Controller A ist bereits in einen navigationController eingebettet. Ich benutze navigationController.presentViewController, um zu MyViewController zu gehen. Und von MyViewController möchte ich auf einen nächsten Viewcontroller C.

+0

Haben Sie einen Viewcontroller präsentieren wollen gefunden, die mit Navigation verbunden? Also, nach dem Präsentieren kannst du pushen und poppen ... ist das der Fall? –

+0

Ja, das ist der Fall. Mein Controller A ist bereits in einen navigationController eingebettet. Ich benutze navigationController.presentViewController, um MyViewController zu bekommen. Und von MyViewController möchte ich Push zu einem nächsten ViewController – kuzdu

+0

Also gehe ich davon aus, dass, wenn Sie versucht, zu einem anderen ViewController von dem vorgestellten Controller zu navigieren, es anstelle von Push angezeigt wird, ist es richtig? –

Antwort

2

SOLUTION schieben die für mich gearbeitet

Ich weiß nicht, warum, aber wenn Sie die presentViewController nutzen zu können muss eine neue definieren (?) root für Ihren navigationController.

In diesem Zusammenhang verstand ich Ahmad Fs Antwort.

if let storyboard:UIStoryboard = UIStoryboard(name: "myStoryboard", bundle: nil) { 
     if let vc = storyboard.instantiateViewControllerWithIdentifier("MyViewController") as? MyViewController { 
      if let navController:UINavigationController = UINavigationController(rootViewController: vc) { 
       dispatch_async(dispatch_get_main_queue()) { 
        self.presentViewController(navController, animated:true, completion: nil) 
       } 
      } 
     } 
    } 

SWIFT 3

let storyboard = UIStoryboard(name: UIConstants.Storyboards.registration, bundle: nil) 
    if let vc = storyboard.instantiateViewController(withIdentifier: "YourViewControllerIdentifier") as? YourViewController { 

     let navigationController = UINavigationController(rootViewController: vc) 
     DispatchQueue.main.async { 
      navigationController.present(vc, animated: true) 
     } 
    } 

I "meine" Lösung here

Verwandte Themen