web-dev-qa-db-ja.com

タブバーコントローラーから「現在の」ナビゲーションコントローラーを取得する方法

タブバーコントローラーの現在表示されているナビゲーションコントローラーを取得する方法はありますか?

たとえば、プログラムには次のように2つのタブバー(それぞれ1つのナビゲーションコントローラー)があります。

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
{   
   //Method is called when user clicks on a hyperlink in one of view controllers
    NSDictionary *dict = [self parseQueryString:[url query]];
    NSString *userID = [dict objectForKey:@"id"];
    NSString *navconTitle = [dict objectForKey:@"navcon"];


    //intention is to Push a view controller onto the CURRENT navigation stack
    [navcon pushViewController:someViewController animated:YES];

    }
}

return YES;
}

より多くのビューコントローラーをプッシュできるように、現在のナビゲーションコントローラーを決定する方法を誰かにアドバイスできますか?

18
Zhen

UITabBarControllers selectedViewControllerプロパティを使用します。

navcon = (UINavigationController*)myTabBarController.selectedViewController;
[navcon pushViewController:someViewController animated:YES];
60
Joe

おもう UITabBarController selectedViewControllerプロパティはあなたが探しているものでなければなりません。

したがって、UITabBarControllerメソッドから:-

 [self.selectedViewController pushViewController:someViewController animated:YES];
3
Adrian B

Swiftバージョン、誰かがObjective-Cを読み取れない場合に備えて、どこからでもtabBarを見つける方法の追加ソリューション。これを使用して、通知を処理するときに画面にプッシュします。

guard let tabBarVC = UIApplication.shared.keyWindow?.rootViewController as? UITabBarController else { return }

if let currentNavController = tabBarVC.selectedViewController as? UINavigationController {
    currentNavController.pushViewController(someVC, animated: true)
}
0
Starsky