2015-12-31 30 views
1

剛剛花了一天的時間在鍵盤上敲打我的頭,我想我會分享我的診斷和解決方案。爲什麼我的視圖沒有使用gestureRecognizer來響應手勢?

情況:您可以在自己的應用中將自定義類CardView的自定義視圖添加到封閉視圖myCards中,並希望每個卡都響應點按手勢(例如,以指示您要放棄該卡)。

在你的ViewController:你開始有典型代碼

class MyVC : UIViewController, UIGestureRecognizerDelegate { 
... 
    func discardedCard(sender: UITapGestureRecognizer) { 
     let cv : CardView = sender.view! as! CardView 
     ... 
    } 

在你myCards建設:

cv = CardView(card: card) 
myCards.addSubview(cv) 
cv.userInteractionEnabled = true 
... 
let cvTap = UITapGestureRecognizer(target: self, action: Selector("discardedCard:")) 
cvTap.delegate = self 
cv.addGestureRecognizer(cvTap) 

我發現這裏的論點非常混亂,文檔不是在所有有幫助。目前尚不清楚target: argument是指實現discardedCard(sender: UITapGestureRecognizer)的類。如果你正在構建ViewController中的識別器和卡片,這將是self。如果您想將discardedCard移動到您的自定義View類(例如)中,則在我的示例中將self替換爲CardView,包括在委託行上。

測試上面的代碼,我發現discardedCard函數從未被調用過。發生了什麼事?

+0

順便說一句,您不需要指定點擊或觸摸的數量;默認值爲1和1:根據文檔,默認值爲1觸摸(手指)和1次輕擊:請參閱https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITapGestureRecognizer_Class/index.html# // apple_ref/OCC/instp/UITapGestureRecognizer/numberOfTouchesRequired – Opus1217

回答

1

所以一天後,這是我必須解決的問題。我希望這個清單對其他人有用。我是新來的iOS(從Android的到來),所以它可能是顯而易見的各位老總:

  1. 做(在本例中cv)確保觸摸視圖具有userInteractionEnabled=true。請注意,如果您使用自己的構造函數,它會成爲默認
  2. 確保所有封閉的觀點也有userInteractionEnabled=true
  3. 其他人發佈的delegate聲明和addGestureRecognizer語句的順序進行的差異;我沒有發現使用Xcode 7.2和iOS 9.2
  4. 最重要的是:確保您的觸摸視圖是完全在封閉視圖的範圍內。在我的示例中,我構建了一個容器,它沒有正確設置寬度,並且正在切斷最右側的卡片(並且由於缺省情況下禁用了剪貼板,因此直到我看到調試器查看層次結構)
相關問題