私の実装は UICollectionViewController に基づいています。タッチダウンとアップのイベントを認識するために、UiTableCell にタッチ動作を実装しようとしました。私の解決策は少しの調査に基づいていますが、それが適切な方法であるかどうかはわかりません。
すべてのテーブル セルに UITapGestureRecognizer をアタッチします。
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
NSDictionary *homeItem = self.homeItems[indexPath.row];
HomeCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:homeItem[@"cell"] forIndexPath:indexPath];
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(cellClicked:)];
//NSArray* recognizers = [cell gestureRecognizers];
// tapGesture.numberOfTapsRequired = 1;
tapGesture.numberOfTouchesRequired = 1;
// // Make the default gesture recognizer wait until the custom one fails.
// for (UIGestureRecognizer* aRecognizer in recognizers) {
// if ([aRecognizer isKindOfClass:[UITapGestureRecognizer class]])
// [aRecognizer requireGestureRecognizerToFail:tapGesture];
// }
[cell addGestureRecognizer:tapGesture];
return cell;
}
ただし、宣言されたアクションは、レコグナイザーの状態 3 (UIGestureRecognizerStateEnded) に対して 1 回だけ呼び出されます。
- (void)cellClicked:(UIGestureRecognizer *)recognizer {
Log(@"cellClicked with state: %d", [recognizer state]);
}
これはすべて、CollectionView 動作のデフォルトの実装が原因である可能性があります。
私はobjcとiosの開発に慣れていないので、状態を介してセルのスタイリングを変更するために実装を完了するために何ができるかわかりません。