2016-05-12 75 views
4

我試圖添加一個UITapGesture到一個UIStackView在一個collectionView單元中,但每次我做我的應用程序崩潰。 (所有IBOutlets已連接)這裏有什麼我在這裏做錯了嗎?添加水龍頭手勢到UIStackView

let fGuesture = UITapGestureRecognizer(target: self, action: #selector(self.showF(_:))) 
cell.fstackView.addGestureRecognizer(fGuesture) 

func showF(sender: AnyObject){ 
     print(111) 
    } 
+1

在'#selector(self.'變化'self'到你的班級名稱 –

+0

向我們展示你的崩潰看起來如何(控制檯輸出) – osxdirk

+0

如果你使用的是Swift 4,你需要showF上的@objc,並且showF應該包含一個_作爲參數。 –

回答

3

是啓用了觸摸的堆棧視圖嗎? 如果不是,請添加。

cell.fstackView.isUserInteractonEnabled = true 
0

如果應用程序崩潰是由於fatal error: unexpectedly found nil while unwrapping an Optional value - 你可能需要增加手勢識別到堆棧視圖之前添加一些延遲。

如果您正在訪問集合視圖單元格子類的init或集合視圖的委託方法中的堆棧視圖屬性,那麼堆棧視圖可能尚未初始化。嘗試使用定時器或GCD增加0.1秒的延遲,它應該工作的罰款...

Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(prepareStackView), userInfo: nil, repeats: false) 

...

@objc func prepareStackView() { 
    let tap = UITapGestureRecognizer(target: self, action: #selector(stackViewTapped)) 
    myStackView.addGestureRecognizer(tap) 
}