UITableViewCell 中的 UIGestureRecognizer

UIGestureRecognizer in UITableViewCell

我想将 UIGestureRecognizer 添加到 UITableViewCell
当我在 CustomCell class 中调用 panAction: 时,它会起作用。
但是我想调用ViewControllerclass中的方法,这样的话就不行了

如何修复才能正常工作panAction:

- (void)viewDidLoad
{
    _tableView = [[UITableView alloc]initWithFrame:self.view.frame];
    _tableView.delegate = self;
    _tableView.dataSource = self;
    [_tableView registerClass:[CustomCell class] forCellReuseIdentifier:@"Cell"];
    [self.view addSubview:_tableView];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *nibName = @"Cell";
    CustomCell *cell = (CustomCell*)[tableView dequeueReusableCellWithIdentifier:nibName];
    if (!cell) {
        cell = (CustomCell*)[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nibName];
    }
    return cell;
}

- (void)setupGesture
{
    UIPanGestureRecognizer* panRecognizer = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panAction:)];
    CustomCell* cell = (CustomCell*)[_tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
    [cell addGestureRecognizer:panRecognizer];
}

- (void)panAction:(UIPanGestureRecognizer *)sender
{
    CGPoint location = [sender translationInView:sender.view];    
    NSLog(@"%f", location);
    [sender setTranslation:CGPointZero inView:sender.view];
}

在上面发布的代码中,您没有调用 setupGesture。这样你的手机就不会接受手势。此外,您应该只添加创建并添加 panRecognizertableview:cellForRowAtIndexpath: 中的单元格,如下所示:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *nibName = @"Cell";
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:nibName];

    UIPanGestureRecognizer* panRecognizer = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panAction:)];
    [cell addGestureRecognizer:panRecognizer];

    return cell;
}