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
被放置在我的其他子视图下方,这使触摸事件不可能被触发。