Ios UITableViewcell和UITableVIew上的手势识别器

Ios UITableViewcell和UITableVIew上的手势识别器,ios,uitableview,uigesturerecognizer,uiswipegesturerecognizer,Ios,Uitableview,Uigesturerecognizer,Uiswipegesturerecognizer,我有一个cutsom UITableViewCell实现。 我已将UITableViewCell的这个子类注册为UIPangestureRecognitor,我使用它来向右或向左滑动单元格 //在UITableViewCell子类中: UIGestureRecognizer* recognizer = [[UIPanGestureRecognizer alloc] initWithTarget: self action:@selector(handlePan:)]; r

我有一个cutsom UITableViewCell实现。 我已将UITableViewCell的这个子类注册为UIPangestureRecognitor,我使用它来向右或向左滑动单元格

//在UITableViewCell子类中:

 UIGestureRecognizer* recognizer = 
 [[UIPanGestureRecognizer alloc] initWithTarget:
 self   
 action:@selector(handlePan:)];

    recognizer.delegate = self;
    [self addGestureRecognizer:recognizer];
       recognizer.cancelsTouchesInView = NO;
现在我想展示一个视图控制器,当用户用两个手指“向上”滑动时 在屏幕上。 因此,我在tableview中添加了一个UISweepGestureRecognitor

//视图控制器中包含tableview引用的代码

UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleViewsSwipe:)];

            [swipe setDirection:UISwipeGestureRecognizerDirectionUp];
            [swipe setDelaysTouchesBegan:NO];
            [[self tableView ]addGestureRecognizer:swipe];
            swipe.cancelsTouchesInView= YES;
            [swipe setNumberOfTouchesRequired:2];
            swipe.delegate = self;
            self.tableView.multipleTouchEnabled = YES;
但当我用两个手指在屏幕上滑动时,平移手势就会被触发。
我如何解决这个问题呢?

正如苏珀所说,将MaximumNumberOfTouchs设置为1可能会起作用

对于试图同时处理两个手势识别器(都是单触手势)的其他人,我发现确保将此代理设置为“是”

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
    return YES;
}
然后在手势识别器操作中,您可以检查特定的翻译或任何您需要的内容,并取消其中一个手势识别器

例如:

- (void)panSwipeRecognizer:(UIPanGestureRecognizer*)panRecognizer
{
    CGPoint translation = [panRecognizer translationInView:self.superview];

    if(panRecognizer.state == UIGestureRecognizerStateBegan)
    {
        if(fabsf(translation.x) < fabsf(translation.y))
        {
            //deactivate horizontal gesture recognizer
            panRecognizer.enabled = NO;
            panRecognizer.enabled = YES;
        }
        else //if(fabsf(translation.x) > fabsf(translation.y))
        {
            //deactivate vertical gesture recognizer
            otherGestureRecognizer.enabled = NO;
            otherGestureRecognizer.enabled = YES;
        }
    }
    //other statements like stateChanged and stateBegan
}
-(无效)Pansweep识别器:(UIPangestureRecognitor*)PanRecognitor
{
CGPoint translation=[panRecognizer translationView:self.superview];
if(panRecognizer.state==UIgestureRecognitizerStateStart)
{
if(fabsf(translation.x)fabsf(translation.y))
{
//停用垂直手势识别器
otherGestureRecognizer.enabled=否;
otherGestureRecognizer.enabled=是;
}
}
//其他语句,如stateChanged和stateStart
}

这可能是因为您尚未为
ui测试识别器设置
MaximumNumberOfTouchs
属性。设置
recognizer.MaximumNumberOfTouchs=1