55

画面のサイズに近い UICollectionView があります。表示される UICollectionViewCells は、collectionView と同じサイズです。各セルには、セルのサイズである UIImage があります。CollectionView ではページングが有効になっているため、基本的にはユーザーがスワイプできる全画面の写真スライドショーです。

問題は
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath、ユーザーがセルを 2 本の指でタップするか、1 本の指で長押しして離した場合にのみ呼び出されることです。シングルタップ選択のデフォルトの動作はないようです。CollectionView ジェスチャ認識エンジンに変更を加えていないため、この問題の解決策を見つけるのに苦労しています。

4

14 に答える 14

204

誤ってオーバーライドしていません- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPathか? 「選択」と「選択解除」は、過去に Xcode のコード補完でつまずきました。

于 2013-05-15T16:20:30.463 に答える
133

私はちょうど同じ問題を抱えていました. が含まUITapGestureRecognizerれていることが判明し、代わりに応答していました.UIViewUICollectionView

didSelectItemAtIndexPathこれは、ユーザーが 2 本の指でタップするか、1 本の指で長押しした場合にのみ機能する理由を説明していUITapGestureRecognizerます。

したがって、そこにあるすべてのものを確認してUITapGestureRecognizerください。必ずしもUICollectionView直接ではありませんが、それUIViewを含むすべてのものである可能性があります。

于 2013-07-31T22:24:11.033 に答える
3

didselect のみを使用する場合:

self.collectionView.allowsMultipleSelection = false

またはその行を削除します。

于 2016-12-14T08:18:28.720 に答える
3

私は自分でこの問題に遭遇しました。もともとボタンとラベルがありましたが、UI をリファクタリングし、それらのボタン/ラベルをUICollectionView.

最終的に、ボタンがタップを消費していることに気付きました。私は無意識のうちに元のボタンをセルに移動しただけで、ストレートに変えていませんでしたUIImage。ボタンに関連付けられたアクションを破壊し、セルの選択を探していたので、それを理解するのに時間がかかりました.

振り返ってみると愚かで明白ですが、自分が何をしたかを理解するのに数時間かかりました.

于 2015-04-16T12:32:19.447 に答える
2

ビューからすべての UIGestures を削除してから、UICollectionView セルが正常に操作できるかどうかをテストしてください。

私の場合、次の行を削除する必要がありました。

let tap = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
    self.view.addGestureRecognizer(tap)
于 2019-01-06T18:51:10.943 に答える
2

私の場合、それはちょうど

self.collectionView.allowsSelection  =NO;

私はコードを持っていました。

に変更

self.collectionView.allowsSelection  =YES;

修理する。

于 2018-01-25T12:05:50.120 に答える
1

Swift 3 と xcode 8 でこの問題に遭遇しました。この中にビューとコレクション ビューがありました。コレクション ビューには userInteractionEnabled が true に設定されていますが、まだ機能していませんでした。shouldHighlightItemAt をオーバーライドしてこの問題を修正しました。余分な / はありません。このメソッドのカスタム実装なので、このメソッドをオーバーライドしませんでした。以下のコードを追加した後、didSelectItem メソッドが呼び出されます。

func collectionView(_ collectionView: UICollectionView, shouldHighlightItemAt indexPath: IndexPath) -> Bool {
        return true
    }
于 2016-11-03T22:04:08.153 に答える