在SideMenu库上禁用用于xcode的滑动/手势

时间:2018-06-07 09:36:32

标签: ios swift navigation-drawer

我在这个github repo中使用了SideMenu库。 https://github.com/jonkykong/SideMenu 在高低之后,我无法确定如何在viewcontroller的导航栏上禁用滑动。

我将使用库中包含的示例作为示例。在MainViewController.swift文件中,SideMenu已启动,据我所知,只有2个与手势相关的方法/功能。并且它们都与禁用对手势的反应无关。我在文件中的setUp方法中添加了这一行。

SideMenuManager.default.menuPushStyle = .preserveAndHideBackButton

我尝试在这些方法中使用childrenController,但是一旦我这样做了,在触及左侧的项目后,我无法在定向视图上使用滑动/手势 > sidemenu /抽屉

无论如何我可以使用此库在导航栏上禁用手势吗?如果我需要编辑问题,请告诉我,因为这是我在stackoverflow中的第一个问题。

3 个答案:

答案 0 :(得分:0)

通过上面github项目的演示示例检查,

SideMenuManager.default.menuAddPanGestureToPresent(toView: self.navigationController!.navigationBar)

此行位于“setupSideMenu”方法的“MainViewController”类中,该方法负责向导航栏添加平移手势,这会导致导航栏的滑动手势。如果您不想要此功能,则只需对该行进行注释即可。

希望它有所帮助...

答案 1 :(得分:0)

不确定您的情况,但是在我的情况下,当用户注销并进入登录屏幕时,我想禁用从左到右的手势。

在用户单击注销时,我将下面的属性设置为0.0,仅此而已。

SideMenuManager.default.menuWidth = 0.0

现在,在用户重新登录后,再次将其重置为85%。

答案 2 :(得分:0)

我只是想出如何自己UITabBarController来完成此操作。对于UINavigationController,该方法将类似。我创建了以下功能来启用/禁用滑动手势:

/// Keeps references to the gestures created by the SideMenu manager.
private var sideMenuGestures : [UIGestureRecognizer] = []

/// Enables or disables the swipe gestures used to show a SideMenu on the given side (default: left).
func enableSideMenuGestures(_ enable: Bool, forMenu: UIRectEdge = .left) {
    if enable {
        if sideMenuGestures.count == 0 {
            sideMenuGestures.append(SideMenuManager.default.menuAddPanGestureToPresent(toView: self.tabBarController!.view))
            sideMenuGestures.append(contentsOf: SideMenuManager.default.menuAddScreenEdgePanGesturesToPresent(toView: self.tabBarController!.view, forMenu: forMenu))
        }
    } else {
        self.tabBarController?.view.gestureRecognizers?.removeAll(where: { sideMenuGestures.contains($0) })
        sideMenuGestures.removeAll()
    }
}

在您的情况下,只需将self.tabBarController替换为self.navigationController,它应该可以正常工作。 (self.前缀不是必需的,但我希望将其作为一种约定包括在内,以表明它是一个继承的字段,而不是我声明的字段。)

之所以有效,是因为SideMenuManager方便地返回对其创建的所有手势的引用;否则,您必须清除导航控制器中的所有手势,这as explained in this answer是个坏主意。

然后,

用法只是在操作处理程序中enableSideMenuGestures(true)中显示一个按钮(例如,显示菜单)的按钮,enableSideMenuGestures(false)当您要再次禁用这些手势时。< / p>