2014-09-29 20 views
7

Mam trzy widoki (widok 1 sprawdza połączenie z serwerem, widok 2 pokazuje główną treść, view3 pokazuje stronę wsparcia) i utworzyłem je w serii ujęć bez kodowania. Po uruchomieniu aplikacji na iOS widok 1 pokazuje spinner podczas sprawdzania połączenia z serwerem. Jeśli sprawdzanie połączenia jest zakończone, chcę przejść do widoku 2, a jeśli to się nie uda, chcę przejść do widoku 3. Widok 1 jest tylko dla sprawdzenia połączenia i nie chcę wracać do tego widoku. Myślę, że nie potrzebuję kontrolera nawigacyjnego, czy?wykonuj segue w viewDidLoad() bez kontrolera nawigacji w Swift

W storyboardzie połączyłem wszystkie widoki z seques. W moim kontroler widoku widzenia 1 to zrobić:

override func viewDidLoad() { 
    super.viewDidLoad() 

    let result:Bool = server.isServerAvailable(myURL) 

    if (result == true) { 
     performSegueWithIdentifier("ConnectionCheckToMain", sender: self) 
    } 
    else { 
     performSegueWithIdentifier("ConnectionCheckToSupport", sender: self) 
    } 
} 

Ale to segue w funkcji viewDidLoad() nie działa, ale nie wiem dlaczego. Dodałem przycisk w widoku, aby to sprawdzić. Zaimplementowałem ten sam kod, jak w viewDidLoad() i działa dobrze. Po kliknięciu przycisku ładuje się następny widok.

Czy jest jakiś pomysł, dlaczego kod nie działa?

Odpowiedz

3

Możesz użyć tego kodu do nawigacji.

let vc : UIViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ConnectionCheckToMain") as! UIViewController; 
    self.presentViewController(vc, animated: true, completion: nil) 
+0

Thx, ale teraz pojawia się następujący komunikat: ** Ostrzeżenie: próba przedstawienia na którego widok nie jest w hierarchii okna ** Gdzie mój błąd? – Martin

+3

Rozwiązałem problem, zmigrowałem kod do viewDidAppear(). – Martin

+0

Próbowałem tego rozwiązania, ale pojawia się błąd ** AnyObject nie można przekształcić w 'UIViewController' czy chciałeś użyć 'jak!' zmusić downcast? ** dlaczego? –

1

miałem ten sam problem i rozwiązać go z tym kodem:

dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      let viewController:UIViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ViewControllerClassId") as! ViewControllerClassName 
      self.presentViewController(viewController, animated: true, completion: nil) 
     }) 
5

Ten kod rozwiązać dla mnie (Swift 3) przy użyciu "segue" (proszę wymienić "ConnectionCheckToMain" z nazwą Segue .

DispatchQueue.main.async(execute: { 
    self.performSegue(withIdentifier: "ConnectionCheckToMain", sender: nil) 
    })