在segue完成后如何执行一些代码?
是否有可能在iOS 6中知道UIStoryboardSegue
完成其转换? 就像当我从UIButton
添加一个UIStoryboardSegue
来UIStoryboardSegue
导航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个传递。 所以你可以在目标控制器中写一个方法,并在这里调用它