web-dev-qa-db-ja.com

UIStackViewにタップジェスチャーを追加する

CollectionViewセル内のUITapGestureUIStackViewに追加しようとしていますが、実行するたびにアプリがクラッシュします。 (すべてIBOutletsが接続されています)これは私がここで間違っていることですか?

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

 func showF(sender: AnyObject){
        print(111)
    }
15
Terrance

スタックビューでタッチが有効になっていますか? Userinteractionパラメータを設定してみてください

cell.fstackView.isUserInteractionEnabled = true 
8
Fadi

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)
}
4
Thomas Jeans