6

私はiOS用のObjective-cでプロジェクトを開発しており、UITabBarControllerのサブクラスを使用して複数のタブを持つビューがあります。各タブには、独自のUINavigationControllerがあります。ビューがタブに読み込まれると、適切なアクティブ化イベント(viewWillAppear、viewDidLoadなど)が発生します。ただし、別のタブをタップしてから戻ると、ビューはその特定のタブ(たとえば、viewDidLoad)の表示ビューになっているため、これらのすべてのイベントが再度発生するわけではありません。

私の質問はこれです:ウィンドウに表示されているビューが変更されたときに登録して通知を受け取ることができる通知または委任はありますか?私はいくつかの調査を行いましたが、これに固有のものは見つかりませんでした。私がやろうとしていることは:

  1. タブバーのインデックスが変更されたときに表示されるビューを確認します:tabBarController:didSelectViewController
  2. 各ナビゲーションコントローラーでこのイベントに登録します:navigationController:didShowViewController:animated:

これにより、タブを変更するか、タブのナビゲーションフロー内を移動して、visibleViewControllerが変更されるたびに通知を受ける必要があります(モーダルを除いて、この場合は気にしません。すでに処理されています)。

これは正しいアプローチですか?

4

2 に答える 2

1

UITabBarControllerDelegate を見たことがありますか? この方法は、あなたが探しているものに聞こえます:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController

ドキュメントから:

In iOS v3.0 and later, the tab bar controller calls this method regardless 
of whether the selected view controller changed. In addition, it is called only
in response to user taps in the tab bar and is not called when your code 
changes the tab bar contents programmatically.

リンクは次のとおりです。 http://developer.apple.com/library/ios/#documentation/uikit/reference/UITabBarControllerDelegate_Protocol/Reference/Reference.html

それが役立つことを願っています!

于 2012-10-31T19:08:40.500 に答える
0

まず、UITabBarControllerデリゲートメソッド「tabBarController:didSelectViewController」を実装し、アプリデリゲートに登録します。各ナビゲーションコントローラーに登録することはできません。デリゲートになることができるオブジェクトは1つだけです。そのメソッドでは、それをUINavigationControllerに型キャストします。

次に、そのUINavigationControllerで「topViewController」を呼び出してUIViewControllerを取得します。次に、viewWillAppear:メソッドを直接呼び出します。

于 2012-10-31T21:33:24.640 に答える