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

bog*_*gen 30 uiviewcontroller ios segue uistoryboardsegue ios6

在iOS 6中是否可以知道何时UIStoryboardSegue完成了转换?就像当我在navigationcontroler上添加一个UIStoryboardSeguefrom UIButton来推送另一个UIViewController时,我希望在推送转换完成后立即执行某些操作.

小智 20

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

– navigationController:didShowViewController:animated:
Run Code Online (Sandbox Code Playgroud)

  • 这适用于原始视图控制器具有导航控制器的推送segues,但是在模态segues的情况下该怎么办? (9认同)

Lev*_*evi 15

如果您不想使用该viewDidAppear:方法,可以创建自定义segue.在该perform方法中,您将使用动画进行转换,并且可以具有完成块.您可以在动画完成后添加代码.

  • 它是你如何创建它,但你必须继承`UIStoryboardSegue`并在其中实现`perform`方法.之后,在`storyboard`中,将segue的类设置为刚刚创建的类. (2认同)

cle*_*ght 8

在Swift中,UIViewController您可以从子类获取UINavigationController实例并设置委托,以便了解segue的完成情况,如图所示.跟踪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)")
    }
 }
Run Code Online (Sandbox Code Playgroud)

但是,这只能说明你当顺着接下去的VC完全,其会viewWillAppear()viewDidAppear()呈现在VC委托方法; 但是,他们没有告知目标VC何时提供.它也只有在View Controller是导航控制器堆栈的一部分时才有效.

在您正在跟踪的VC中,您可以添加以下内容以检测VC(及其内存)何时被释放,或覆盖该viewWillDisappear()方法.

deinit {
    println(__FUNCTION__, "\(self)")
}
Run Code Online (Sandbox Code Playgroud)