2015-03-05 14 views
27

Próbuję zaimplementować ekran logowania, po kliknięciu logowania robi segue "login".Swift prepareForSegue anuluj

Dodałem zmianę typu prepareForSegue(), aby spróbować anulować, jeśli logowanie się nie powiedzie, ale nie widzę żadnej metody, aby anulować przejście, jeśli wystąpi błąd.

Jaki jest najlepszy sposób na zrobienie tego?

+1

To wydaje się złe podejście. Powinieneś przeprowadzić segue tylko wtedy, gdy logowanie się powiedzie, zamiast wywoływać segue bez względu na to i spróbować anulować, jeśli logowanie się nie powiedzie. – Ian

Odpowiedz

58

powinny przesłonić shouldPerformSegueWithIdentifier i return false jeśli logowanie nie powiodło się:

override func shouldPerformSegueWithIdentifier(identifier: String?, sender: AnyObject?) -> Bool { 
    if let ident = identifier { 
     if ident == "YourIdentifier" { 
      if loginSuccess != true { 
        return false 
      } 
     } 
    } 
    return true 
} 

aktualizowana SWIFT 3 Swift 3 metoda nazywa się teraz shouldPerformSegue

override func shouldPerformSegue(withIdentifier identifier: String?, sender: Any?) -> Bool { 
    if let ident = identifier { 
     if ident == "YourIdentifier" { 
      if loginSuccess != true { 
       return false 
      } 
     } 
    } 
    return true 
} 

// Rozszerzony

Jeśli ty programowo wywołać performSegueWithIdentifier ta metoda nie zostanie wywołana, ale to nie potrzeba, że ​​można nazwać to po prostu Twój sukces logowania, w przeciwnym razie zignoruj ​​go:

if loginSuccess { 
    performSegueWithIdentifier("login", sender: nil) 
} 
+0

Jednym z problemów z używaniem 'performSegueWithIdentifier' jest to, że nie uzyskujesz dostępu do kontrolera widoku docelowego, a zatem nie możesz przekazać do niego danych? –

+1

@SimonBengtsson Nie, ale możesz zastąpić 'przygotować (dla segue: UIStoryboardSegue, sender: Any?)', Aby to zrobić. – Skoua

10

Można zrobić segue z widoku kontrolera, a nie z określoną przycisk. Robisz to, przeciągając ctrl z żółtego przycisku u góry VC na storybooku. Pamiętaj o nadaniu identyfikatorowi segue!

Następnie można utworzyć funkcję IBAction z przycisku logowania i wykonać performSegueWithIdentifier. Powinno to wyglądać mniej więcej tak:

@IBAction func loginButtonTapped(sender: UIButton) { 
    if loginSuccess { 
     performSegue(withIdentifier: "login", sender: nil) 
    } 
} 

następnie w przygotowanie (:), można zrobić dodatkowej konfiguracji dla segue, jak zostanie ona wywołana przed rzeczywistą segue odbywa.

+1

To powinna być zaakceptowana odpowiedź! –