UITableView中的UIPanGestureRecognizer在iOS8上不起作用

问题描述:

我有一个UITableView,其中包含UIPanGestureRecognizer的单元格。这些作品在iOS7上完美无瑕,但在iOS8上无法使用。我试图实现UIGestureRecognizerDelegate中的几种方法,但我无法使其工作。UITableView中的UIPanGestureRecognizer在iOS8上不起作用

这是怎么了我已经实现了我的细胞:

- (void)awakeFromNib 
{ 
    self.panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panning:)]; 
    self.panRecognizer.delegate = self; 
    self.panRecognizer.minimumNumberOfTouches = 1; 
    self.panRecognizer.maximumNumberOfTouches = 1; 
    [self.contentView addGestureRecognizer:self.panRecognizer]; 
} 

-(void)panning:(UIPanGestureRecognizer*)sender 
{ 
    [self.dragDelegate dragCell:self isPanningForRecognizer:sender]; 
} 

#pragma mark - UIGestureRecognizerDelegate 
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    return YES; 
} 

这仅仅适用于iOS7,但它不能在iOS8上工作。

我已经尝试实现这些方法藏汉(即使它没有必要在iOS7):

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    NSLog(@"shouldRecognizeSimultaneouslyWithGestureRecognizer"); 
    return YES; 
} 

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer 
{ 
    NSLog(@"gestureRecognizerShouldBegin"); 
    return YES; 
} 

但我的问题似乎是,gestureRecognizer:shouldReceiveTouch:不会被调用的iOS8上。在iOS8上调用的唯一方法是gestureRecognizerShouldBegin:,即使我返回YES也不起作用。

如果你能想出另一种方法使其工作,我愿意以不同的方式处理这个问题。

看起来苹果在iOS8中改变了contentView的一个UITableViewCell。无论我尝试了多少次,我都无法使它在contentView上工作,但是当我拼命尝试将识别器添加到contentView的子视图中时,它就起作用了。

编辑:

通过进一步调查中我使用的是厦门国际银行文件没有contentView。这是一个标准的UIView,它被设置为我的自定义单元类。问题似乎是iOS7在其他子视图之上自动添加contentView,即使contentView不是xib文件。另一方面,iOS8也是这样做的,但contentView被放置在我的其他子视图下方,这使触摸事件不可能被触发。