2016-08-05 72 views
0

我目前编程包含一个主屏幕视图控制器和它在加载主屏幕实例化,并点击一个汉堡包图标时,打开一个工具栏菜单视图的应用程序。我想实现的是点击菜单之外,而它的开放关闭菜单,并恢复正常功能的主视图,这是在打开菜单中禁用该功能。 我实例化一个viewDidLoad()UITapGestureRecognizer用户点击主页视图来检测。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

回答

0

您可以执行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 
     } 
    } 
} 
+0

呀,其实我想通了这一点,在过去十几分钟,用类似的解决方案!感谢您的帮助! –