0

私の tabBarController ベースのアプリには、tabA、tabB、tabC、および tabD の 4 つのタブがあります。ユーザーはタブ間をジャンプできます。

今私の質問に:
- tabA、tabB、およびtabDには単一のviewController
があります - tabCには3つのviewControllerがあります - vc1、vc2、およびvc3

アプリがユーザーが最後にいた viewController を記憶し、ユーザーが tabC をタップすると、ユーザーが最後にいたビュー コントローラーにコントロールが移動するという問題が発生しています。たとえば、次のようなシーケンスがあるとします。

  1. ユーザーが tabA をタップ: tabA のビュー コントローラーが表示されます
  2. ユーザーが tabD をタップ: tabD のビュー コントローラーが表示されます
  3. ユーザーが tabC をタップ: ビュー コントローラー vc1 が表示されます。何らかのアクションをタップすると、ユーザーは vc3 に移動します
  4. ユーザーが tabB をタップ: tabB のビュー コントローラーが表示されます
  5. ユーザーが tabC をタップ: vc3 が表示されます - 代わりに vc1 を表示したいと思います

これまでのところ、tabC の vc1 で次のことを試しましたが、vc1 にまったく制御が来ません。

- (void) viewWillAppear:(BOOL)animated {
      [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES];
}

常に vc1 をロードするように tabC に指示するにはどうすればよいですか?

よろしく - 前もって感謝します....
サム。

4

2 に答える 2

0

@dvorak: 回答ありがとうございます。

私が書いていることは答えではないことはわかっていますが、私が取り組んでいるコードを示したかったのです。

私は提案で運がありません。AppDelegate を TabBarControllerDelegate にしました。コールバック関数が呼び出されます - ただし、次のコードを使用すると、popToRootViewController を実行できません。

- (void)tabBarController:(UITabBarController *)tbController didSelectViewController:(UIViewController *)viewController {
       NSLog(@"ViewController is <%@>", viewController.tabBarItem.title);
       if ([viewController.tabBarItem.title isEqualToString:@"tabC"]) {
           NSArray *tmp = [viewController.navigationController.tabBarController viewControllers];
          [viewController.navigationController popToRootViewControllerAnimated:YES];
       }
}

tabC の 3 つの VC すべてにアクセスした後、配列内に 3 つの ViewController が表示されることを期待して、tmp variable内のすべての ViewController を収集しました。tabC->vc3 から、tabB を押してから、演習のために tabC を押しました。デバッガーでtmp配列の要素がありませんでした。

于 2011-09-18T21:16:36.033 に答える
0

tabC の vc1 への呼び出しは呼び出されない可能性がありviewWillAppear:ます。ビューがディスプレイに表示されるときにのみ呼び出されます。

この関数を見たいと思うかもしれません:

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

( Apple Developer ドキュメントへのリンク)

そしてこの機能:

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated

( Apple Developer ドキュメントへのリンク)

これをtabBarControllerデリゲートに実装すると、ユーザーが tabC を選択したときに動作できます。つまり、次のようになります。

- (void)tabBarController:(UITabBarController *)tabBarController 
   didSelectViewController:(UIViewController *)viewController
{
    if (viewController == \* tabC view controller */) {
        [tabCViewController.navigationController popToRootViewController:YES];
    }
}
于 2011-09-18T01:19:58.367 に答える