2016-08-05 67 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

呀,其實我想通了這一點,在過去十幾分鍾,用類似的解決方案!感謝您的幫助! –