7

ナビゲーション スタックを使用してビューをプッシュする際に問題が発生しています。

私が遭遇する問題は、タブバー項目に触れた後、View Controller が次のように (FirstViewController という名前の View Controller から) ナビゲーションスタックにプッシュされることです:

- (void)viewDidLoad
{
    [super viewDidLoad];
    svc = [[SecondViewController alloc] init];
    [self.navigationController pushViewController:svc animated:YES];
}

これは期待どおりに機能しますが、実際の問題は、同じタブ バーの項目をもう一度タッチすると発生します。

それが発生すると、現在のビュー (以前にプッシュされた SecondViewController) が削除され、「完了」ボタンを押したようになります。

どこで、なぜそれが起こっているのかを追跡することはできません。

編集:これは、タブバー、ビューコントローラー、およびナビゲーションを設定する方法です:

@implementation AppDelegate
@synthesize HomeViewController, FirstViewController, SecondViewController,     ThirdViewController, SettingsViewController, tabBarController, window;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    FirstViewController *firstViewController = [[FirstViewController alloc]
                                            initWithNibName:nil bundle:nil];
    UINavigationController *firstViewControllerNav = [[UINavigationController alloc]
                                      initWithRootViewController:firstViewController];

    SecondViewController *secondViewController = [[SecondViewController alloc]
                                             initWithNibName:nil bundle:nil];
    UINavigationController *secondViewControllerNav = [[UINavigationController alloc]
                                                      initWithRootViewController:secondViewController];

    ThirdViewController *thirdViewController = [[ThirdViewController alloc]
                                                  initWithNibName:nil bundle:nil];
    UINavigationController *thirdViewControllerNav = [[UINavigationController alloc]
                                                      initWithRootViewController:thirdViewController];

    self.tabBarController = [[UITabBarController alloc] init];
    self.tabBarController.viewControllers = @[firstViewControllerNav,
                                              secondViewControllerNav];

    UITabBar *tabBar = tabBarController.tabBar;

    UITabBarItem *tabBarItem1 = [tabBar.items objectAtIndex:0];
    UITabBarItem *tabBarItem2 = [tabBar.items objectAtIndex:1];

    [self.window setRootViewController:self.tabBarController];

    [self.window makeKeyAndVisible];

    return YES;
}
4

1 に答える 1

12

タブ バー項目を 2 回タッチすると、ナビゲーション コントローラーがルート ビュー コントローラーに戻ります。これは予期された組み込みの動作です。

これを防ぐには、 UITabBarControllerDelegate プロトコルのtabBarController:shouldSelectViewController:メソッドを使用する必要があります。

私はこのようなことがうまくいくと信じています:

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
    return viewController != tabBarController.selectedViewController;
}
于 2013-10-14T21:12:16.773 に答える