使用滑动手势时 TabController 消失

TabController disappears when using swipe gesture

我有一个包含 3 个标签页的应用程序。我想向右或向左滑动以转到另一个选项卡。

我的代码:

//Swipe Between Tabs
    let rightSwipe = UISwipeGestureRecognizer(target: self, action: Selector("handleSwipes:"))
    let leftSwipe = UISwipeGestureRecognizer(target: self, action: Selector("handleSwipes:"))
    rightSwipe.direction = .Right
    leftSwipe.direction = .Left
    view.addGestureRecognizer(rightSwipe)
    view.addGestureRecognizer(leftSwipe)
    //end Swipe

执行它的函数是

func handleSwipes(sender:UISwipeGestureRecognizer) {
    if (sender.direction == .Left) {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewControllerWithIdentifier("PantryList")
        let navigationController = UINavigationController(rootViewController: vc)

        self.presentViewController(navigationController, animated: true, completion: nil)
    }
    if (sender.direction == .Right) {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewControllerWithIdentifier("ToDoList")
        let navigationController = UINavigationController(rootViewController: vc)

        self.presentViewController(navigationController, animated: true, completion: nil)
    }
}

我的问题是使用滑动时底部的 tabBarController 消失了。根据我的发现,它与 "presentViewController" 方法有关。这是造成它的原因吗?有没有办法在不丢失 tabBarController 的情况下做到这一点?如果不需要,我真的不想使用 prepareForSegueWithIdentifier。除非必须这样做,否则这似乎比需要完成的工作更多。

我也认为你的问题出在 presentViewController:。假设滑动处理代码在 UITabBarController 中,您在这里所做的是将 VC 推到整个 tabcontroller 的顶部。

我会尝试将 selected view controller's view 沿着下一个要显示的 VC 视图移动(在滑动移动给定的方向),然后将 UITabBarController selectedViewController 的值更改为您的新 VC.

当然是因为您在当前视图控制器之上呈现视图控制器。要在 UITabbarController viewControllers 之间切换,您可以使用 setSelectedIndex: 方法,在您的情况下,您的第一个 vc 将有 0 个索引,第二个和第三个分别为 1 和 2。只需轻扫切换选定的索引,就大功告成了!祝你好运!

if (sender.direction == .Right) {
    self.navigationController.tabBarController.selectedIndex = 1
}