1

の中でnavigationControllerChildViewControllerユーザーが [戻る] ボタンをタップしたとき。parentViewController出かける前に にデータを送信したいと思います。

使用する以外にこれを行う簡単な理由はありますか

-(void)viewWillDisappear;

まず、これChildViewControllerにも独自の子があり、プッシュviewWillDisappearされると呼び出されるためです。

次に、ユーザーがホームボタンを押したとき。呼び出されます(推測)

これを行うための合理的かつ適切な方法はありますか?

4

3 に答える 3

4

これは、modalViewControllersが表示されたとき、またはさらにviewControllersがプッシュされたときにviewWillDisappearが呼び出されるという問題を回避する簡単な解決策です。たとえば、実際にスタックから削除された場合を検出します。

-(void)viewWillDisappear:(BOOL)animated {
  NSUInteger ind = [[self.navigationController viewControllers] indexOfObject:self];
  if (ind == NSNotFound) {
      // do something, we're coming off the stack.
  }
}

これの利点は、UINavigationControllerをサブクラス化する必要がないことです。

ソース: http: //objectivesea.tumblr.com/post/21705735018/poppingoffthestack

于 2012-10-05T15:03:12.460 に答える
2

UINavigationControllerDelegateを使用してこの問題を解決します。

この場合、これを使用してコントローラーを追跡し、コントローラーnavigationController:willShowViewController:animated:間で必要なデータを転送するように実装できます。viewWillDisappearすべてのコントローラーにデータ転送ロジックの一部を含める代わりに、そのデリゲート内でデータ転送ロジックを分離できるため、通知にフックしようとするよりもはるかにクリーンです。

于 2012-10-05T15:03:12.257 に答える
2

これは、次のいずれかの方法で実行できます。

  1. 2 番目のコントローラーがなくなるときに通知を送信し、親にリッスンしてもらいます。

  2. 2 番目のコントローラーが親メソッドを直接参照できるようにするデリゲート プロトコルを作成します。

  3. 親のプロパティを使用して、再表示されているかどうかviewWillAppear:を確認してください。isMovingToParentViewController

値の受け渡し条件と値の可用性に最適なものを適用します。

于 2012-10-05T15:05:06.200 に答える