Подтвердить что ты не робот

Как выполнить какой-то код после выполнения segue?

Возможно ли в iOS 6 знать, когда a UIStoryboardSegue завершил свой переход? Например, когда я добавляю UIStoryboardSegue из UIButton, чтобы нажимать еще один UIViewController на навигационном контроллере, я хочу что-то сразу после завершения push-перехода.

4b9b3361

Ответ 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 проходит там. поэтому вы можете написать метод в контроллере назначения и вызвать его здесь