Jak wykonać jakiś kod po zakończeniu płynności?


Czy w iOS 6 można dowiedzieć się, kiedy
UIStoryboardSegue
zakończyło przejście? Na przykład, kiedy dodam
UIStoryboardSegue
z
UIButton
, aby wypchnąć kolejny
UIViewController
do kontrolera nawigacji, chcę zrobić coś zaraz po naciśnięciu kompletny.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz użyć protokołu
UINavigationControllerDelegate
, a następnie zdefiniować:
– navigationController:didShowViewController:animated:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli nie chcesz korzystać z metody
viewDidAppear:
, możesz utworzyć niestandardowy płyn. W metodzie
perform
użyłbyś animacji do przejścia, a to może mieć blok uzupełniania. Możesz tam dodać kod po zakończeniu animacji.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W Swift z podklasy
UIViewController
można uzyskać instancję
UINavigationController
i ustawić delegata, aby otrzymywać informacje o zakończeniu segmentu, jak pokazano na rysunku. Innym logicznym miejscem do śledzenia segmentów byłoby
AppDelegate
.
Na przykład robiąc to z kontrolera widoku (w skrócie VC):
class MyViewControllerSubclass : UIViewController, UINavigationControllerDelegate { func viewDidLoad() {
self.navigationController.delegate = self
} func navigationController(navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) {
println("Did show VC: \(viewController)")
}
}

Ale to pokazuje tylko wtedy, gdy przejście do VC jest zakończone,
takie jak
viewWillAppear ()
lub
viewDidAppear ()
metody delegatów są ujawniane w VC; jednak nie zgłaszają, kiedy docelowy VC

nie

przedstawione. Będzie również działać tylko wtedy, gdy kontroler widoku jest częścią stosu kontrolerów nawigacji.
W monitorowanym VC możesz dodać następujące polecenie Aby wykryć, kiedy VC (i jego pamięć) jest zwolnione, lub nadpisać metodę
viewWillDisappear ()
.
deinit {
println(__FUNCTION__, "\(self)")
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz użyć - (void) PreparatForSegue: (UIStoryboardSegue *) segue sender: (ID) sender
Ta metoda zostanie wywołana tuż przed wykonaniem płynności w oryginalnym UIViewController. Jeśli chcesz wykonać jakiś kod w miejscu docelowym UIViewController, możesz pobrać kontroler widoku docelowy segue.
Możesz również dodać ten kod do elementu viewdidAppear w pliku kids-theatre-viewController.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

można wywołać metodę przypisania UIViewController w metodzie replaceForSegue.
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSLog(@"prepareForSegue: %@", segue.identifier); if ([segue.identifier isEqualToString:@"Happy"]) {
[segue.destinationViewController setHappiness:100];
} else if ([segue.identifier isEqualToString:@"Sad"]) {
[segue.destinationViewController setHappiness:0];
}
}

tutaj metoda setHappiness jest kontrolerem docelowym, a tutaj 100 przechodzi przez to. w ten sposób możesz napisać metodę w kontrolerze docelowym i wywołać ją tutaj

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się