Czy można anulować segue w prepareForSegue:
metodzie?
Chcę wykonać pewne sprawdzenie przed segue, a jeśli warunek nie jest spełniony (w tym przypadku, jeśli niektóre UITextField
są puste), zamiast wykonywania segue wyświetl komunikat o błędzie.
Czy można anulować segue w prepareForSegue:
metodzie?
Chcę wykonać pewne sprawdzenie przed segue, a jeśli warunek nie jest spełniony (w tym przypadku, jeśli niektóre UITextField
są puste), zamiast wykonywania segue wyświetl komunikat o błędzie.
Jest to możliwe w iOS 6 i nowszych: Musisz zaimplementować tę metodę
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
W twoim kontrolerze widoku. Dokonujesz tam walidacji, a jeśli wszystko jest w porządku, to return YES;
jeśli nie, to nie return NO;
jest wywoływana funkcja PrepForSegue.
Zauważ, że ta metoda nie jest wywoływana automatycznie podczas programowego uruchamiania segu. Jeśli musisz wykonać sprawdzenie, musisz wywołać funkcję shouldPerformSegueWithIdentifier, aby ustalić, czy wykonać segue.
if ([self shouldPerformSegueWithIdentifier:@"segueIdentifier" sender:nil]) { [self performSegueWithIdentifier:@"segueIdentifier" sender:nil]; }
Uwaga: zaakceptowana odpowiedź jest najlepszym podejściem, jeśli możesz kierować reklamy na iOS 6. W przypadku targetowania na iOS 5 ta odpowiedź będzie wystarczająca.
Nie sądzę, że można anulować segue w
prepareForSegue
. Sugerowałbym przeniesienie logiki do punktu, w którymperformSegue
wiadomość jest wysyłana po raz pierwszy.Jeśli używasz Konstruktora interfejsów, aby podłączyć segue bezpośrednio do kontrolki (np. Łącząc segue bezpośrednio z a
UIButton
), możesz to zrobić przy odrobinie refaktoryzacji. Połącz segue z kontrolerem widoku zamiast określonego kontrolki (usuń stare łącze segue, a następnie przeciągnij z samego kontrolera widoku do docelowego kontrolera widoku). Następnie utwórzIBAction
kontroler widoku i połącz go z sekcją IBAction. Następnie możesz wykonać swoją logikę (sprawdzić, czy pole TextField jest puste) w utworzonym IBAction i zdecydować, czyperformSegueWithIdentifier
programować.źródło
Swift 3 : func shouldPerformSegue (withIdentifier identifier: String, sender: Any?) -> Bool
Zwraca wartość true, jeśli należy wykonać segment, lub false, jeśli należy go zignorować.
Przykład :
źródło
Alternatywnie, nieco złym zachowaniem jest oferowanie przycisku, którego użytkownik nie powinien naciskać. Możesz zostawić segue okablowanym jako stojaki, ale zacznij od wyłączonego przycisku. Następnie połącz „editChanged” UITextField ze zdarzeniem w ala kontroli widoku
źródło
Łatwo jest szybko.
źródło
Jak powiedział Abraham, sprawdź poprawność lub nie w następującej funkcji.
I
performSegueWithIdentifier:sender:
wywoływane przez programowanie można zablokować, zastępując następującą metodę. Domyślnie nie sprawdza poprawności lub nie-shouldPerformSegueWithIdentifier:sender:
, możemy to zrobić ręcznie.źródło
[super performSegueWithIdentifier:identifier sender:sender];
naprawdę prawdziwa?performSegueWithIdentifier:sender:
metodę, a nie wywołasz jej, tosuper
metoda.Powinieneś wykonać Segue dla logowania Zarejestruj się
źródło
Podobnie do odpowiedzi Kaolina jest pozostawienie seque podłączonego do kontroli, ale sprawdzenie poprawności na podstawie warunków w widoku. Jeśli odpalasz interakcję komórki tabeli, musisz również ustawić właściwość userInteractionEnabled, a także wyłączyć rzeczy w komórce.
Na przykład mam formularz w zgrupowanym widoku tabeli. Jedna z komórek prowadzi do innego tableView, który działa jak próbnik. Za każdym razem, gdy kontrola jest zmieniana w głównym widoku, wywołuję tę metodę
źródło
Odpowiedź Swift 4:
Poniżej przedstawiono implementację Swift 4, aby anulować segue:
źródło
Innym sposobem jest zastąpienie metody tableView za pomocą willSelectRowAt i zwrócenie wartości zero, jeśli nie chcesz wyświetlać segue.
showDetails()
- jest trochę bool. W większości przypadków powinien być zaimplementowany w modelu danych reprezentowanym w komórce za pomocąindexPath
.źródło