1

Swift 2.3、XCode 8.0 で iOS アプリを開発しています。私のアプリには 4 つのタブがあり、各タブには 4 つの異なるビュー コントローラーが接続されています。4 つのビュー コントローラーの内部には、ナビゲーション コントローラーが組み込まれています。

私の要件は、ユーザーがタブ 1 を選択すると、ViewController 1 に移動します -> 次に、ナビゲーション コントローラーがあるため、ユーザーは 2 番目の View Controller に移動できます。ただし、ユーザーが 2 番目のタブを選択してから最初のタブに戻ると、タブ 1 に直接接続されている最初のビュー コントローラーを表示する代わりに、[戻る] ボタンで最後に開いたビュー コントローラーが表示されます。最初のタブに接続されているView Controllerに直接移動するにはどうすればよいですか?

4

2 に答える 2

0

埋め込みナビゲーション コントローラーは、ユーザーがタブ バー コントローラーを使用してどのタブにいるかに関係なく、スタックを自動的に追跡する必要があります。タブ バー コントローラー全体を 1 つのナビゲーション コントローラーに埋め込むのではなく、各タブに独自のナビゲーション コントローラーが組み込まれていることを確認します。

たとえば、これをプログラムで実装した場合:

    let viewController1 = UIViewController()
    let navigationController1 = UINavigationController()

    navigationController1.setViewControllers([viewController1], animated: true)

    let viewController2 = UIViewController()

    let tabBarController1 = UITabBarController()
    tabBarController1.setViewControllers([navigationController1, viewController2], animated: true)

ここで、navigationController1 は、ユーザーがタブ バー コントローラーのどこにいるかに関係なく、どの viewController がスタックの一番上にあるかを追跡します。

于 2016-12-02T15:41:58.393 に答える
0

ありがとう、私は解決策を見つけました -

これは私にとってはうまくいきます-メインタブバーのviewControllerで、両方のデリゲートにしてから、以下のメソッドをUITabBarController, UITabBarControllerDelegate実装しました-didSelectViewControllerUITabBarControllerDelegate

func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {
    let index : Int = (tabBarController.viewControllers?.indexOf(viewController))!

    let navigationController = viewController as? UINavigationController
        navigationController?.popToRootViewControllerAnimated(false)

}
于 2016-12-05T06:26:04.710 に答える