コレクションビューがあります。データソースデリゲートはうまく機能しますが、UICollectionViewDelegate
:
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"didselect");
}
呼び出されませんが、デリゲートを設定しましたが(データソースで行ったように機能しました)、セルはnibから読み込まれ、UICollectionViewCell
のサブクラスに接続されていますが、セルはとにかく私のタッチに反応しない。セルにあるUIImageView
でユーザー操作を有効にしました。
また:
-(BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"this is caled");
return YES;
}
呼ばれていません!
言ったように、私は設定しました:
[self.collectionView setDelegate:self];
そしてもちろん
<UICollectionViewDelegate>
また、touchBegan
オーバーライドもありません。
[〜#〜]更新[〜#〜]:
奇妙な!長押しした場合にのみ呼び出されます!どうすればこれを修正できますか、delaysContentTouchesをNOに設定し、ジェスチャー認識機能を実装していません。
助けてください。ありがとう。
ビュー階層のどこかにUITapGestureRecognizer
があるようです。デフォルトでは、UITapGestureRecognizer
sはユーザーが受け取ったタッチを消費します。つまり、階層内でその下のビューには渡されません。不正なタップジェスチャーを見つけて、この行を追加する必要があります
tapGestureRecognizer.cancelsTouchesInView = NO;
これにより、階層内でその下のビューにタッチが渡され、問題を解決できると期待されます。
TapGestureRecognizerをどこかに追加したようで、セルを選択できません。それらをチェックしてください、それが問題であるはずです。
私は同じ問題に直面していました。カスタムUICollectionViewセルをクリックしても、クリックが検出されませんでした。私の場合、問題はCustomCellのXibでuserInteractionが有効になっていて、UICollectionviewのdidSelectItemAtIndexPathが呼び出されなかったため、ハンドラーのない特定のセルにユーザータップ情報が送信されていたことが原因でした。
PSUICollectionViewでも同様の問題があり(これはiOS5でも機能します)、CollectionViewCellにボタンを配置してそのボタンのターゲットを設定することで修正しました。また、どのボタンが押されたかを知るためにタグを追加します。
答えを探している他の人のための参照としてここに追加
短い答え:
テーブルビューに関連付けられているデフォルトのジェスチャー認識機能のタッチを遅らせます:
if let gestures = tableView.gestureRecognizers{
for gesture in gestures {
gesture.delaysTouchesBegan = true
}
}
説明
すべてのテーブルビューには、ジェスチャ認識機能が関連付けられています。これにより、カスタムUItableViewセルへのタッチが遅延します。 delaysTouchesBeganをtrueに設定すると、タッチをサブビューにすばやく渡すことができます。
私の場合、それはCollectionViewController内UItableViewCellであり、collectionView:didSelectItemAtIndexPathは遅れて呼び出されます。
ur .hファイルで、CellViewControllerをインポートしてデリゲートを追加します
#import "myColleCell.h"
UIViewController<UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout>
ur .mファイルで、次のコードをur ViewDidLoad
に追加します。
UINib *cellNib = [UINib nibWithNibName:@"myColleCell" bundle:nil];
[myCollectionView registerNib:cellNib forCellWithReuseIdentifier:@"myColleCell"];
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
[flowLayout setItemSize:CGSizeMake(220, 220)];
[flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
[myCollectionView setCollectionViewLayout:flowLayout];
そしてur CellViewController
でセルをセットアップします
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identifier= @"myColleCell";
myColleCell *cell = (myColleCell *)[collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
[cell setupCell:[dataArray objectAtIndex:indexPath.row]];
//setup cell function methods placed in your CellViewController
return cell;
}
最後に、cellView、collectionViewがユーザーインタラクティブにYESに設定されていることを確認します
userInteractionEnabled
でNO
プロパティをUICollectionViewController
に設定しているオブジェクトがないことを確認します。
他の人が言っているのと同じように、私はこれと同じ問題を抱えていましたが、親ビューが子ビューコントローラーとして追加しているuserInteractionEnabled
への呼び出しを削除することで修正されました。セルにUIButton
を追加し、タッチイベントを受信できないことを確認することで、これをテストできました。