Возможно ли в iOS 6 знать, когда a UIStoryboardSegue
завершил свой переход? Например, когда я добавляю UIStoryboardSegue
из UIButton
, чтобы нажимать еще один UIViewController
на навигационном контроллере, я хочу что-то сразу после завершения push-перехода.
Как выполнить какой-то код после выполнения segue?
Ответ 1
Вы можете использовать протокол UINavigationControllerDelegate
, а затем определить:
– navigationController:didShowViewController:animated:
Ответ 2
Если вы не хотите использовать метод viewDidAppear:
, вы можете создать пользовательский сегмент. В методе perform
вы должны использовать анимацию для перехода и иметь блок завершения. Вы можете добавить код после завершения анимации.
Ответ 3
В Swift из подкласса UIViewController
вы можете получить экземпляр UINavigationController
и установить делегат, чтобы быть проинформированным о завершении segues, как показано. Другим логическим местом для отслеживания сегментов может быть AppDelegate
.
Пример выполнения этого из контроллера вида (короткое замыкание):
class MyViewControllerSubclass : UIViewController, UINavigationControllerDelegate {
func viewDidLoad() {
self.navigationController.delegate = self
}
func navigationController(navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) {
println("Did show VC: \(viewController)")
}
}
Но это только показывает вам, когда segue в VC завершен,
как и viewWillAppear()
или viewDidAppear()
делегировать методы в ВК; однако они не сообщают о том, когда целевой VC не представлен.
В VC, который вы отслеживаете, вы можете добавить следующее, чтобы обнаружить, когда VC (и его память) освобождены или переопределить метод viewWillDisappear()
.
deinit {
println(__FUNCTION__, "\(self)")
}
Ответ 4
Вы можете использовать - (void) prepareForSegue: (UIStoryboardSegue *) segue отправитель: (id) отправитель
Этот метод будет вызван непосредственно перед выполнением segue в исходном UIViewController. Если вы хотите сделать какой-то код в целевом UIViewController, вы можете получить контрольный контроллер места назначения.
Вы также можете добавить этот код в viewdidAppear в диспетчере представлений удаления.
Ответ 5
вы можете вызвать метод назначения UIViewController в методе prepareForSegue.
-(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];
}
}
здесь setHappiness метод имеет назначение Controller и здесь 100 проходит там. поэтому вы можете написать метод в контроллере назначения и вызвать его здесь