Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在选项卡之间移动后返回选项卡栏的主ViewController_Ios_Uiviewcontroller_Swift2.3 - Fatal编程技术网

Ios 在选项卡之间移动后返回选项卡栏的主ViewController

Ios 在选项卡之间移动后返回选项卡栏的主ViewController,ios,uiviewcontroller,swift2.3,Ios,Uiviewcontroller,Swift2.3,我正在用Swift 2.3、XCode 8.0开发一个iOS应用程序。我的应用程序有4个选项卡,每个选项卡连接4个不同的视图控制器。在4个视图控制器中,我嵌入了导航控制器 我的要求是,当用户选择tab 1->转到ViewController 1->下一步时,用户可以转到第二视图控制器,因为有一个导航控制器。 但是,当用户选择第二个选项卡,然后返回第一个选项卡时,将显示上次使用“后退”按钮打开的视图控制器,而不是显示直接连接到选项卡1的第一个视图控制器。 如何直接移动到附加到第一个选项卡的视图控制

我正在用Swift 2.3、XCode 8.0开发一个iOS应用程序。我的应用程序有4个选项卡,每个选项卡连接4个不同的视图控制器。在4个视图控制器中,我嵌入了导航控制器

我的要求是,当用户选择tab 1->转到ViewController 1->下一步时,用户可以转到第二视图控制器,因为有一个导航控制器。 但是,当用户选择第二个选项卡,然后返回第一个选项卡时,将显示上次使用“后退”按钮打开的视图控制器,而不是显示直接连接到选项卡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位于堆栈顶部,而不管用户在选项卡栏控制器中的哪个位置

嵌入式导航控制器应自动为您跟踪堆栈,无论用户使用选项卡栏控制器处于哪个选项卡。确保每个选项卡都嵌入了自己的导航控制器,而不是将整个选项卡栏控制器嵌入到一个导航控制器中

例如,如果以编程方式实现此功能:

    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位于堆栈顶部,而不管用户在选项卡栏控制器中的哪个位置

谢谢,我找到了解决办法-

这对我有用- 在我的主选项卡栏viewController中,我让它成为
uitabarcontroller和uitabarcontrollerdelegate
的代理,然后实现
didSelectViewController
uitabarcontrollerdelegate
方法,如下所示-

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

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

}

谢谢,我找到了解决办法-

这对我有用- 在我的主选项卡栏viewController中,我让它成为
uitabarcontroller和uitabarcontrollerdelegate
的代理,然后实现
didSelectViewController
uitabarcontrollerdelegate
方法,如下所示-

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

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

}

我在故事板中实现了ViewController、NavigationController和TabController之间的连接,而不是以编程方式。那么,如何从更改选项卡上的子视图控制器访问父视图控制器呢。请告知。我已经在情节提要中实现了ViewController、NavigationController和TabController之间的连接,而不是以编程方式实现的。那么,如何从更改选项卡上的子视图控制器访问父视图控制器呢。请告知。