【问题标题】:Disabling swipe/gesture on SideMenu library for xcode在 xcode 的 SideMenu 库上禁用滑动/手势
【发布时间】:2018-06-07 09:36:31
【问题描述】:

我使用的是来自这个 github repo 的 SideMenu 库。 https://github.com/jonkykong/SideMenu 在高高低低之后,我无法确定如何禁用视图控制器导航栏上的滑动。

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

SideMenuManager.default.menuPushStyle = .preserveAndHideBackButton

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

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

【问题讨论】:

  • 你检查过变量 menuEnableSwipeGestures 了吗?将其值设置为 false 可能会起作用
  • @Van 我相信该变量用于启用/禁用侧边菜单/抽屉栏上的滑动。我已经测试过了。我只想在主视图控制器的导航栏上禁用滑动/手势,我读过 repo 的所有者提到他的库达到了 90% 以上的用例。所以我不想直接给他发邮件来打扰他。如果不行,我可能会尝试以 DIY 的方式实现 sideMenu。
  • 隐藏导航控制器的后退按钮,默认使用导航滑动返回
  • @YonkaiLife 你能详细说明你想禁用的手势吗?你的意思是正确的滑动手势,它会在顶部弹出视图控制器?
  • To IraniyaNaynesh SideMenuManager.default.menuPushStyle = .preserveAndHideBackButton 我相信该行从导航栏中删除后退按钮。 @Van 我想要的方式就像适用于 iOS 的 Gmail 应用程序。如果您按应用程序左上角(位于导航栏中)的图标,则会出现侧面菜单。如果您从左向右滑动导航栏下方的屏幕,则会显示侧边菜单。但是你不能从导航栏或图标上滑动来使用侧边菜单。但是现在,您可以在 SideMenu 库的示例应用程序中滑动图标或导航栏。如果您需要更多信息,请告诉我。

标签: ios swift navigation-drawer


【解决方案1】:

正如上面 github 项目中的演示示例所检查的那样,

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

此行在方法“setupSideMenu”中的“MainViewController”类中,该方法负责将平移手势添加到导航栏,从而导致导航栏的滑动手势起作用。如果你不想要这个功能,你可以简单地评论该行,它会起作用。

希望对你有帮助...

【讨论】:

    【解决方案2】:

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

    在用户点击注销时,我将下面的属性设置为 0.0,就是这样。

    SideMenuManager.default.menuWidth = 0.0
    

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

    【讨论】:

    • 将菜单宽度设置为 0 似乎对我没有影响。此外,根据文档,默认值为屏幕的 75%(或 240 分,以较小者为准)。
    【解决方案3】:

    我刚刚想出了如何自己为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

    Usage 就是按钮的操作处理程序中的enableSideMenuGestures(true),该按钮显示菜单(例如)和enableSideMenuGestures(false),当您想再次禁用手势时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多