2017-01-21 18 views
1

タブバーコントローラに2つのメインVCがあります。最初のVCでは、ボタンをタップすると別のVC(2番目のタブバーVCではなく)に移動し、終了ボタンをタップすると2番目のタブバーvcに移動します。コントローラを破棄してタブを切り替える方法

通常、私はsegueを実行します...しかし、私がそうすると、下部のタブバーが削除されます。だから、私は今ちょうど却下していますし、元のVCに行くが、私は本当に第二タブバーのVCに行きたいと思いますので、私はこの

dismiss(animated: true) { 
    self.tabBarController?.selectedIndex = 2 
} 

を試してみました私は別の上で... self.tabBarを見ました私はインデックスを設定する場所を見つけることができないようです... iveは1から試してみた場合に1を試して、1から開始する場合は2を試しました

閉じる私が欲しいものを達成する良い方法がありますか?

概要

明確に要約します。私は3つのView Controllerを持っています。 1と3はTab Bar Controllerにあります。 VC 2はTBCにはありません。 VC 2に到達するには、VC 1にボタンがあります。ユーザーがVC 2で終了すると、ユーザーはボタンをタップします。 VC 1に戻るのではなく、VC 3に行きたいのですが、segueを実行するとVC 3になりますが、タブバーは削除されます。

+1

あなたは十分な情報を提供していません。最初のすべて:「別のVCに移されました」 - モーダルでナビゲーションスタックにプッシュされていますか?あなたが「却下」と言うとき、モーダルプレゼンテーションを意味します。あなたが「別のVC」を提示する方法は何ですか? firstVC.present(...)またはfirstVC.tabController.present(...)?それがfirstVC.presentであれば、firstVC.tabController.presentに切り替えてみてください。私はあなたが解決策を見つける必要があると思うなぜタブバーは削除されました。私はそれがないべきであることを賭ける – iWheelBuy

+0

正しい答えを得るために、より多くの細部を提供しなさい。 Q1。 rootVCをどのように設定しますか? Q2。あなたはどのようにUITabbarVCを追加しますか? Q3。 VC1、VC2、VC3をどのように追加しますか? –

+0

VC 2が 'UITabBarController'になく、' self.tabBarController'が 'nil'であるため、' dismiss'コードがVC 2にある場合、補完ハンドラは何もしません。 – Jiri

答えて

6

最初のViewControllerとしてUINavigationControllerがあることを確認してください。そして、あなたはtabBarControllerへのアクセス権を持ってして、タブを切り替えることができます。

view controllers

// if vc was pushed 
@IBAction func onFinish(_ sender: Any) { 
    // store tabBarController for later use 
    let tabBarController = self.tabBarController 

    // pop to root vc (green one) 
    _ = self.navigationController?.popToRootViewController(animated: false) 

    // switch to 2nd tab (red vc) 
    tabBarController?.selectedIndex = 1 
} 

// if vc was presented modally 
@IBAction func onFinish(_ sender: Any) { 
    self.dismiss(animated: false, completion: nil) 

    if let tabBarController = self.presentingViewController as? UITabBarController { 
     tabBarController.selectedIndex = 1 
    } 
} 

// if vc was presented modally + switching tab in completion block 
@IBAction func onFinish(_ sender: Any) { 
    if let tabBarController = self.presentingViewController as? UITabBarController { 
     self.dismiss(animated: true) { 
      tabBarController.selectedIndex = 1 
     } 
    } 
} 
+0

私は帰宅するときに試してみる – RubberDucky4444

+0

あなたの賞金を授与するには16時間待たなければならないと言います...私はそれをやるでしょう、私はその後に行うのではなく完成ブロックの中でそのタイプのコードをしようとしていました却下 – RubberDucky4444

+0

ありがとうございました@ RubberDucky4444完了ブロックのタブも切り替わります。あなたはpresentingViewControllerを自分から最初に取得する必要があります。 (解任後、self.presentingViewControllerはnilになります) –

0

インデックスは常に使用する言語で0から始まります。

タブバーに関しては、表示コントローラに表示されているselfを表示コントローラに表示していません。これを実行するには、実行できるようにする必要があります。これを実行するには、実行する必要があります。これはVCの設定に基づいて動作しない可能性があります。

+0

ウィンドウのメンバーがいないというエラーが表示される – RubberDucky4444

+0

@ RubberDucky4444 try 'UIApplication.shared.keyWindow.rootViewController'これが機能しない場合は、' storyBoard.instantiateViewController()を使用してストーリーボードからタブコントローラーを読み込むこともできます。 ' –

0

あなたは、ビューコントローラを却下する前に、特定のインデックスに移動することができます。

func moveToVC() { 
     if let mainNavVC = self.presentingViewController as? UINavigationController { 
      if mainNavVC.viewControllers.count > 0 { 
       if let tabbarVC = mainNavVC.viewControllers.first as? TabBarViewController { 
        tabbarVC.selectedIndex = 0 
       } 
      } 
     } 
    } 
関連する問題