0

我有一个带有 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。除非必须这样做,否则这似乎比需要完成的工作更多。

4

3 回答 3

1

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

于 2016-01-28T13:02:24.207 回答
1
if (sender.direction == .Right) {
    self.navigationController.tabBarController.selectedIndex = 1
}
于 2016-01-28T13:03:44.600 回答
0

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

我将尝试沿着要显示的下一个 VC 视图移动所选视图控制器的视图(在滑动移动给出的方向上),然后将 UITabBarController selectedViewController 的值更改为您的新 VC。

于 2016-01-28T12:58:51.690 回答