2015-08-08 28 views
1

我有一個100x600 UIView坐在UIViewViewController頂部。通常情況下,我想隱藏這個視圖。當用戶點擊幾個控件之一(包括主視圖)時,我取消隱藏子。主攻UIView上的任何地方都會隱藏它。UITapGestureRecognizer迴應不正確的UIView

在viewDidLoad中,我有以下UITapGestureRecognizer:

let viewTouch = UITapGestureRecognizer(target: self, action: "viewClicked:") 
    self.view.addGestureRecognizer(viewTouch) 

的viewClicked功能如下:

func viewClicked(gestureRecognizer: UIGestureRecognizer) { 
    handleDisplayOfDropdownView() 
} 

的handleDisplayOfDropdown功能是負責顯示和隱藏子UIView。它所做的只是調整子視圖的alpha值,以使其可見或不可見。

func handleDisplayOfDropdownView() { 
    UIView.animateWithDuration(0.5, animations: { 
     if !self.dropDownVisible { 
      self.dropDownVisible = true 
      self.dropDownView.alpha = 1.0 
     } 
     else { 
      self.dropDownVisible = false 
      self.dropDownView.alpha = 0 
     } 
    }) 
} 

所有的UI工作都由故事板完成。我只是在ViewController的頂部放置了一個100x600的視圖。它通過點擊主UIView而變得可見和隱藏。

我遇到的問題是,當我點擊它時,sub UIView消失。當我設置了UITapGestureRecognizer時,我發現主要的UIView上只有一個水龍頭會激活並隱藏它。似乎在任何地方竊聽,包括sub UIView都在隱藏它。

我是不是正確設置了UITapGestureRecognizer

+0

您需要請檢查是否有在未來的觸摸點子視圖的框架與否。如果是隱藏它的子查看其他的取消隱藏。 – Amit89

回答

2

添加gestureDelegate:

UIGestureRecognizerDelegate 

在viewDidLoad中設置viewTouch UITapGesture委託:

viewTouch.delegate = self 

然後調用該委託

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool { 
    let p = touch.locationInView(view) 
    if CGRectContainsPoint(dropDownView.frame, p) { 
     return false 
    } 
    return true 
    } 
+0

完美地工作。謝謝。我確實對gestureRecognizer做了一個小修改。我增加了以下內容: '如果dropDownVisible { 還真 }' 這讓我挖掘區域的觀點是,把它,但只有在當前沒有被顯示的看法! 感謝您的幫助! –

相關問題