如何使用多个部分检测UITableViewCell的UIView上的触摸?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用多个部分检测UITableViewCell的UIView上的触摸?相关的知识,希望对你有一定的参考价值。

我发现已经有一些解决方法如何检测我单元格中的触摸,但它们是针对一个部分进行的。我有超过1(8 tbh)。以下代码正在触摸几个单元而不是一个单元。所以问题是,对我的问题有什么明确的解决方案?这里的代码:

- (CatalogItemTableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
CatalogItemTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];

CatalogItemModel *currentItemModel;

if(isCatSelected) {
    currentItemModel = [[self.itemsArray objectForKey:[[self.sectionArray objectAtIndex:selectedIndexPath] valueForKey:@"id"]] objectAtIndex:indexPath.row];
} else {
    currentItemModel = [[self.itemsArray objectForKey:[[self.sectionArray objectAtIndex:indexPath.section] valueForKey:@"id"]] objectAtIndex:indexPath.row];
}

[cell setItemModel:currentItemModel];

UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                                    action:@selector(didTapFav:)];
[cell.overFavorite addGestureRecognizer:gestureRecognizer]; //overFavorite is UIView to detect touch

return cell;
}

动作功能:

-(void)didTapFav:(UITapGestureRecognizer*)recognizer {
NSString *token = [ProfileManager getToken];
if(token.length > 0){
    [[NSNotificationCenter defaultCenter] postNotificationName:@"addToFavorite" object:self];
} else {
    [self showErrorWithTitle:@"Auth" andText:@"To add item in Favorite!"];
}

}

CatalogItemTableViewCell中的函数:

-(void)addToFavorite {
    if(isFavorite) {
        [ApiManager tryAddToFavItem:[NSString stringWithFormat:@"%ld", (long)self.currentModel.uid] :^{
            //Some API request
        }];
    }
}
答案

首先为CollectionView添加gestureRecognizer

UIGestureRecognizer * tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap:)]; tapGesture.delegate = self; [self.collectionView addGestureRecognizer:tapGesture];

然后获取要访问的IndexPath或Cell - (void)tap:(UITapGestureRecognizer *)sender;

if (sender.state == UIGestureRecognizerStateEnded) {

    NSIndexPath *indexPath = [self.collectionView indexPathForItemAtPoint:[sender locationInView:self.collectionView]];
}

以上是关于如何使用多个部分检测UITableViewCell的UIView上的触摸?的主要内容,如果未能解决你的问题,请参考以下文章

如何检测对 UITableViewCell 的 UIView 的触摸超过一个部分?

如何使用 UISwipeGestureRecognizer 在 UITableViewCell 中检测滑动事件

在 UITableViewCell 中未检测到点击手势

如果 UITableViewCell 有多个按钮,那么处理触摸事件的最佳位置在哪里

UITableViewCell 如何检测用户向左或向右滑动?

UITableViewCell 滚动检测