带有可折叠侧边栏菜单 Swift 的 UITapGestureRecognizer

Posted

技术标签:

【中文标题】带有可折叠侧边栏菜单 Swift 的 UITapGestureRecognizer【英文标题】:UITapGestureRecognizer with collapsible sidebar menu Swift 【发布时间】:2016-08-05 03:41:53 【问题描述】:

我目前正在编写一个应用程序,其中包含一个主屏幕视图控制器和一个侧边栏菜单视图,该视图在加载主屏幕时被实例化,并在单击汉堡图标时打开。我正在尝试实现在打开菜单时单击菜单外部关闭菜单并将正常功能恢复到主视图的功能,该功能在打开菜单时被禁用。 我在viewDidLoad() 中实例化了UITapGestureRecognizer,以检测用户何时点击主视图。

    let tapRecognizer:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(HomeViewController.handleTap(_:)))
    self.tableView.addGestureRecognizer(tapRecognizer)

下面是实现:

func handleTap(sender: UITapGestureRecognizer) 
    if menu.isMenuOpen 
        menu.showMenu(false)
        self.tableView.allowsSelection = false
    

但是,点击菜单会关闭菜单,就像在菜单外点击一样。此外,由于轻击手势识别器仅识别特定轻击,因此主屏幕上的所有内容始终处于禁用状态。我在 ios 9.3 上运行 XCode 7.3。图片: Home view controller with menu open

【问题讨论】:

【参考方案1】:

你可以实现UIGestureRecognizerDelegate并设置tapRecognizer.delegate = self

然后实现下面的方法

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool 
    if (gestureRecognizer == tapRecognizer)
    let point = touch.locationInView(self.view)
        if CGRectContainsPoint(menuView.frame, point) == true 
            return false
        
    

【讨论】:

是的,我实际上是在最后十分钟内发现的,使用了类似的解决方案!不过感谢您的帮助!

以上是关于带有可折叠侧边栏菜单 Swift 的 UITapGestureRecognizer的主要内容,如果未能解决你的问题,请参考以下文章

带有侧边菜单的快速导航栏错误

Bootstrap 4折叠侧边栏必须点击两次

无法在我的侧边栏中展开菜单项以做出反应

jquery两行代码实现侧边栏三级折叠菜单

Bootstrap:导航栏:导航侧菜单:在小屏幕上折叠

VUE项目实战19实现侧边栏折叠与展开功能