web-dev-qa-db-ja.com

セグエが行われた後にいくつかのコードを実行する方法は?

IOS 6でUIStoryboardSegueの移行がいつ終了したかを知ることはできますか? UIStoryboardSegueからUIButtonを追加して、ナビゲーションコントローラーで別のUIViewControllerをプッシュするときのように、プッシュ遷移が完了した直後に何かにしたいと思います。

31
bogen

UINavigationControllerDelegateプロトコルを使用して、以下を定義できます。

– navigationController:didShowViewController:animated:
20
New

viewDidAppear:メソッドを使用しない場合は、カスタムセグエを作成できます。 performメソッドでは、遷移にアニメーションを使用し、完了ブロックを含めることができます。アニメーションが完了したら、そこにコードを追加できます。

15
Levi

Swiftでは、次のようにUIViewControllerサブクラスからUINavigationControllerインスタンスを取得してデリゲートを設定し、セグエの完了について通知を受けることができます。セグエを追跡する別の論理的な場所は、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のセグエが完了したときにのみ表示され、viewWillAppear()またはviewDidAppear() VCが表示されますが、ターゲットVCがn-presentedである場合は通知されません。ビューコントローラーがナビゲーションコントローラスタックの一部。

VCに、次のコードを追加して、VC(およびそのメモリ)が割り当て解除されたときを検出するか、viewWillDisappear() 方法。

_deinit {
    println(__FUNCTION__, "\(self)")
}
_
8
clearlight