在segue完成后如何执行一些代码?

是否有可能在iOS 6中知道UIStoryboardSegue完成其转换? 就像当我从UIButton添加一个UIStoryboardSegueUIStoryboardSegue导航UIStoryboardSegue上的另一个UIViewController时,我想在push-transition完成之后立即执行某个操作。

您可以使用UINavigationControllerDelegate协议,然后定义:

 – navigationController:didShowViewController:animated: 

如果你不想使用viewDidAppear:方法,你可以创build一个自定义的inheritance。 在perform方法中,您可以使用animation进行转换,并且可以有一个完成块。 animation完成后,您可以在其中添加代码。

在Swift中,从一个UIViewController子类,你可以得到UINavigationController实例并设置委托,以便通知segues的完成,如图所示。 另一个跟踪赛段的逻辑地点可能是AppDelegate

从视图控制器(简称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)") } } 

但是,只有当VC完成时才会显示你,VC中的viewWillAppear()viewDidAppear()委托方法也会显示。 然而,他们不知道目标VC什么时候没有出现。

在跟踪的VC中,可以添加以下内容来检测VC(及其内存)何时解除分配,或覆盖viewWillDisappear()方法。

 deinit { println(__FUNCTION__, "\(self)") } 

你可以使用 – (void)prepareForSegue 🙁 UIStoryboardSegue *)segue sender:(id)sender

这个方法在源UIViewController中执行segue之前被调用。 如果您想在目标UIViewController中执行一些代码,您可以获得segue的目标视图控制器。

您也可以在desintation viewController中的viewdidAppear中添加此代码。

您可以在prepareForSegue方法中调用目标UIViewController的方法。

 -(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方法是目标控制器,这里有100个传递。 所以你可以在目标控制器中写一个方法,并在这里调用它