3

私はUICollectionViewControllerセルの束をレイアウトするクラスを持っています。touchesBeganユーザーがセルに触れたとき、最初のタッチでセルの選択が完了するまで、このメソッドを使用して新しいタッチを防止したいと考えています。

ビューコントローラーに次のコードを入れてみましたが、呼び出されません。

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    super.touchesBegan(touches, withEvent: event)
    print("touches began")
}

ただし、プロジェクトの他の場所には、のサブクラスである別のクラスがありUIViewControllerます。そこで、touchesBegan次のコードを使用して、そのクラスのテキスト ビューのキーボードを閉じると、そのコードは問題なく呼び出されます。

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    super.touchesBegan(touches, withEvent: event)
    view.endEditing(true)
}

このコードがあるクラスでは機能し、他のクラスでは機能しないのはなぜですか? また、コレクション ビュー セルへのタッチを検出するためにtouchesBeganin myを使用するにはどうすればよいですか? UICollectionViewControllerSwiftでの解決策をいただければ幸いです。御時間ありがとうございます!

調査: このソリューションをチェックアウトしました: UiCollectionView で Touch を処理しますか? しかし、答えは主にその特定のプロジェクトに当てはまります。

ジェスチャ認識エンジンを使用して実行しようとしましたが、ジェスチャ認識エンジンはに対してのみ起動self.collectionView?.userInteractionEnabled = falseしません。そのため、それ以上の接触を防ぐために使用できませんでした。selector.state == .Began.Ended

私もUILongPressGestureRecognizer同じことをしようとしましたが、そのジェスチャはコレクション ビュー セルがリッスンするデフォルトのタップ ジェスチャを妨げるため、セルの通常のタップは受信されず、セルを選択できません。

元の質問には回答していませんが、回答として回避策を投稿しました。

4

1 に答える 1