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

Posted

技术标签:

【中文标题】在 xcode 的 SideMenu 库上禁用滑动/手势【英文标题】:Disabling swipe/gesture on SideMenu library for xcode 【发布时间】: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 的项目后,我无法在定向视图上使用滑动/手势 /抽屉

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

【问题讨论】:

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

【讨论】:

以上是关于在 xcode 的 SideMenu 库上禁用滑动/手势的主要内容,如果未能解决你的问题,请参考以下文章

Xcode AMSlideMenu 仅使用按钮打开左侧菜单,禁用滑动

使用动态数据的 MF Sidemenu 问题

ResideMenu 项禁用?

如何使 Xcode segues 不可逆?

在 SwifUI TabView 中禁用滑动手势

暂时禁用手势识别器滑动功能