2016-04-01 1 views
2

5つのタブがあり、ルートコントローラーにポップアップすると最後に使用したタブに移動します。特定のタブにジャンプする方法はありますか?例えばルートコントローラーではなくタブコントローラーの特定のタブへ

//takes me to last used tab on the tab controller 
@IBAction func goHome(sender: AnyObject) 
{ 
self.navigationController?.popToRootViewControllerAnimated(true) 
} 

私はオープン10のView Controllerを持っているし、私はtabcontrollerインデックス0にジャンプしたい上のボタンをクリックすると、ホーム・ページである

+0

あなたが最初のタブを選択するために、 'self.tabBarController.selectedIndex = 1 'のようなものでTabControllerを使用している場合は、その特定のタブとpopToRootViewControllerのためのナビゲーションコントローラを得ることができます。 – Lucho

+0

同様の問題。 http://stackoverflow.com/questions/8963450/jump-to-a-specific-tab-in-a-uitabbarcontroller –

答えて

0

これはスウィフトあるので、あなたがしたいかもしれませんアプリの構造がこれまで変化した場合の祖先として使用すると、タブバーコントローラを持っていることを確認してください。

@IBAction func goHome(sender: UIButton) { 
    self.navigationController?.popToRootViewControllerAnimated(true) 
    if let tab = self.tabBarController { 
     tab.selectedIndex = 0 // Or whichever number you like 
    } 
} 
+0

これまでも以前使用したタブに移動します。 View Controllerにはタブコントローラーが表示されていないので、rootにポップしてタブを選択しても、それでもまだ動作しないのはなぜですか=( – swiftTonio

+0

現在のコントローラーがタブコントローラーどのように表示されるのでしょうか?(または、おそらく質問は:ナビゲーションコントローラはどのように表示されましたか)人々が投稿した回答は、通常のタブ/ナビゲーション構造では妥当で、これとは何が違うのですか? –

+0

imタブコントローラのルートにポップするナビゲーションコントローラ上で、しかし、私はルートにポップした後にインデックスを選択することができません。私は他の人と比較して私のものと何が違うのですか? – swiftTonio

2

このコードは、タブに連れて行くとそのタブのルートビューコントローラにポップアップ表示されます。

func buttonAction(sender: AnyObject){ 
    let someTabIndex = 0 
    // Get the tabBar 
    let t = self.tabBarController 
    // Change the selected tab item to what you want 
    t?.selectedIndex = someTabIndex 
    // Pop the navigation controller of that index 
    let v = t?.viewControllers?[someTabIndex] 
    if let n = v?.navigationController { 
     n.popToRootViewControllerAnimated(true) 
    } 

} 
+0

'popToRootViewController(anim ated:false) '、このナビゲーションコントローラを最初に非表示にする必要があります。したがって、 't?.selectedIndex = i'は、popよりも早く呼び出されるべきです。ちょうど' popToRootViewController(animated:) 'に関するappleの文書に記述されています。 –

0
func goToRootOfTab(index: Int) { 
    let window = (UIApplication.shared.delegate as? AppDelegate)?.window 
    let tabBar :UITabBarController? = window?.rootViewController as? UITabBarController 
    tabBar?.selectedIndex = index 
    // pop to root if navigated before 
    if let nav = tabBar?.viewControllers?[index] as? UINavigationController { 
     nav.popToRootViewController(animated: true) 
    } 
} 
関連する問題