popToRootViewControllerAnimated メソッドを呼び出す前にデータをルート ビュー コントローラに送り返す最良の方法は何ですか? 現在のビューコントローラーが存在しないことをルートビューコントローラーに通知し、セグエを通じてプッシュされたビューコントローラーの記録を保持しようとしています。
3 に答える
現在のView Controllerが「存在しなくなる」まで待つ必要はありません。現在のView Controllerは存在しますが、ルートView Controllerは現在のView ControllerのnavigationController.viewControllers[0]
. これで、このメッセージからそのメッセージにメッセージを送信するために必要な参照が得られました。ルート ビュー コントローラーのクラスにキャストするだけで、ルート ビュー コントローラーの任意のパブリック メソッドを呼び出すことができます。
MyRootViewController* rvc = (MyRootViewController*)(self.navigationController.viewControllers[0]);
rvc.coolData = myCoolData;
これを行う基本的な方法は 2 つあります。1) NSNotification メッセージを使用する方法、または 2) デリゲート呼び出しを使用する方法です。両方をコーディングする方法に関するチュートリアルはたくさんあります。私はこの質問への答えとして小さなデリゲート チュートリアルを書きました: iPhone アプリの [戻る] ボタンと、ここで素晴らしい NSNotification チュートリアルを見つけることができます: Objective-C で NSNotificationCenter を介してメッセージを送受信しますか?
UINavigationController をサブクラス化し、配列を追跡するために必要なメソッドをオーバーライドできます。スタックからポップされたビュー コントローラーごとに固有のタイトル セットを保持することをお勧めします。以前のView Controllerが存在しないことを現在のView Controllerに通知することについては、それ-viewWillAppear
が目的です。より細かい制御が必要な場合は、View Controller インスタンスがスタックから 1 つ以上のインスタンスをポップするときに、Navigation Controller が呼び出すプロトコルに準拠するプロトコルを作成します。