LoginSignup
2
2

More than 5 years have passed since last update.

UITabBarControllerの子としてUINavigationControllerを持たせて、その中のテーブルから遷移した際の

Last updated at Posted at 2015-03-02

以下のような構造で

UITabBarController
└UINavigationController(タブA)
 └UITableViewController (一覧画面)
 └UIViewController (詳細画面)

└UINavigationController(タブB)
 └UIViewController

手順

(1)タブA表示中に、一覧画面のUITableViewCellをタップして、詳細画面へ遷移
(2)タブB(TabBarItem)をタップした後、またタブAに戻る
(3)タブAでは、詳細画面が表示されている
(4)タブAが表示された状態で、タブA(TabBarItem)を押す
(5)詳細画面が一覧画面にPOPする

上記(5)の動作を止める為にはどうしたらよいかハマっていました

解決策

UITabBarControllerのサブクラス内
デリゲートメソッドでタブ切り替えのキャンセル処理

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)
{
    UINavigationController *nav = (UINavigationController *)viewController;
    if ([NSStringFromClass([nav.viewControllers[0] class]) isEqualToString:@"詳細画面のクラス名文字列"]) {
        if ([nav.viewControllers count] == 2 && selectedController == viewController) {
            return NO;
        }
    }
    return YES;
}
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    if (selectedController != viewController) {
        selectedController = viewController;
    }

}
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2