UIStoryboardSegue
の移行が完了したことをiOS 6で知ることは可能ですか?私がUIStoryboardSegue
をUIButton
から別のUIViewController
にナビゲートすると、プッシュトランジションが終了した直後に何かしたいのですが。セグが完了した後、コードを実行するにはどうすればよいですか?
答えて
あなたはUINavigationControllerDelegate
プロトコルを使用して、定義することができますので、移動先のコントローラのメソッドを書くことができ、ここでそれを呼び出します示されているように、セグの完了を知らせるために、代理人。セグを追跡する別の論理的な場所は、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)")
}
viewDidAppear:
メソッドを使用しない場合は、カスタムセグを作成できます。 perform
メソッドでは、トランジションにアニメーションを使用し、それには完了ブロックを使用できます。アニメーションが完了したら、そこにコードを追加できます。
ストーリーボードの標準的なドラッグアンドドロップセグは使用できません。 – hakonbogen
これはどのように作成するのですが、 'UIStoryboardSegue'をサブクラス化し、その中に' perform'メソッドを実装する必要があります。その後、 'storyboard'でセグのクラスをあなたが作成したクラスに設定します。 – Levi
あなたが使用することができます - (無効)prepareForSegue:(UIStoryboardSegue *)セグエ送信者:(ID)の送信者を
セグエは、ソースのUIViewControllerで行われる直前に、このメソッドが呼び出されます。宛先UIViewControllerでいくつかのコードを実行したい場合は、segueの宛先viewcontrollerを取得できます。
このコードを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];
}
}
ここに設定されている方法は宛先コントローラであり、ここでは100が通過しています。
– navigationController:didShowViewController:animated:
これは、実際のセグが完了したときに実際には表示されません。これはセグの開始時に発生します。 – Sam
をスウィフトでは、UIViewController
サブクラスからあなたがUINavigationController
インスタンスを取得することができますし、設定します。
- 1. CountDownTimerが実行されて完了するようにするにはどうすればよいですか?
- 2. XMLHttpRequestが完了したときに関数を実行するにはどうすればよいですか?
- 3. 複数のAjaxリクエストの完了後にコールバックを実行するにはどうすればよいですか?
- 4. インストール完了後にバッチスクリプトを実行するにはどうすればよいですか?
- 5. 各ループが完了した後に実行するコード
- 6. ユーザーエージェントプロセスが終了したときにコードを実行するにはどうすればよいですか?
- 7. セグが完了した後にデータを再度ロードする
- 8. スレッドが終了した後でQt関数を実行するにはどうすればよいですか?
- 9. Javascript forEachが実行を完了した後にコードを実行する方法
- 10. Railsのロードが完了した後でコードを実行していますか?
- 11. オブザーバブルが完了した後に実行されるアクションの完了後、どのように操作を実行しますか?
- 12. プログラムで読み込まれたストーリーボードでセグを実行するにはどうすればよいですか?
- 13. 注入が完了した直後にコードを実行できますか?
- 14. タスクの完了後にJavaFXがコードを実行します
- 15. 装飾された関数が完了した後、Pythonデコレータを実行するにはどうすればよいですか?
- 16. C#の実行が完了したがスレッドの実行が完了した後
- 17. 入力が完了したらスキャナを終了するにはどうすればよいですか?
- 18. 選択を完了した後、メニュープログラムを再起動させるにはどうすればよいですか?
- 19. 別のアクティビティが完了した後にアクティビティを呼び出すにはどうすればいいですか?
- 20. node.jsで非同期関数が完了した後に関数を実行するにはどうすればよいですか?
- 21. Vorpal.jsアプリを終了する際にコードを実行するにはどうすればよいですか?
- 22. AngularJSがレンダリングを完了した後にjQueryコードを実行する
- 23. ClickOnceのインストールが完了したらアプリケーションを実行しないようにするにはどうすればよいですか?
- 24. 角度jsがすべてのレンダリングを完了した後にjqueryコードを実行したいですか?
- 25. whileループが終了した後、次のステートメントを続行するにはどうすればよいですか?
- 26. サウンドの再生が停止した後にどのようにセグを実行するのですか?
- 27. リクエストコールをスタックして、完了するまでリクエストが完了しないようにするにはどうすればよいですか?
- 28. downloadTaskが完了した後にsegueを実行する
- 29. each-loopが完了した後に関数を実行する
- 30. Colaboratoryでコードを実行するにはどうすればよいですか?
私が期待したほど悪くはありませんでした。 'self.navigationController = self;'そしてそのメソッドを追加します。 Segue IDに基づいてコントローラをローカル変数に保存し、それらの値を渡された 'ViewController'と比較しました。 –
これは、元のビューコントローラにナビゲーションコントローラがあるプッシュセグの場合に機能しますが、モーダルセグの場合はどうしたらいいですか? – Drux
私はLeviのカスタムSegue答えを使って、ここの例のように 'perform'を実装しました:http://stackoverflow.com/a/23778394/586489これは非常にうまく動作します。プッシュが完了し、セグを使うことができます。 –