在 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 库上禁用滑动/手势的主要内容,如果未能解决你的问题,请参考以下文章