我遇到了允许UITableViewCell上的手势(特别是平移手势)落到底层视图的问题。我已经尝试将关联的UITableViewCell的userInteractionEnabled标志设置为false,但手势仍然没有通过UITableViewCell到达基础视图。
以下是我的故事板
如何让UITableViewCell中的手势落到其底层视图?
答案 0 :(得分:0)
您可以使用gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
委托方法。只要有手势识别,就会调用此方法。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
if ([touch.view isDescendantOfView:self.button1]) {
// Perform the required operation here
}
return YES;
}
您可以这样检查:
if ([touch.view isDescendantOfView:self.tableView]) {
return NO;
}
答案 1 :(得分:0)
UITableView
是UIScrollView
的子类。在UIScrollView
中,我找到了两个手势识别器panGestureRecognizer
和pinchGestureRecognizer
。但我认为禁止这样做是不好的,因为这会导致你的表视图无法再滚动。我建议你去KVO那个属性并获取触摸事件并处理你自己的事情(或添加新动作?)。
答案 2 :(得分:0)
我为long press event
添加了UITableViewCell
,如下所示。
可能会帮助您解决问题。
-(void)viewDidLoad {
[super viewDidLoad];
UILongPressGestureRecognizer *longPressGestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
[longPressGestureRecognizer setDelegate:(id)self];
[self.tableView addGestureRecognizer:longPressGestureRecognizer];
}
然后处理action
,如下所示。
- (void)handleLongPress:(UILongPressGestureRecognizer *)longPressGestureRecognizer {
CGPoint point = [longPressGestureRecognizer locationInView:self.tableView];
NSIndexPath * indexPathForSelectedRow = [self.tableView indexPathForRowAtPoint:point];
if (indexPathForSelectedRow != nil && longPressGestureRecognizer.state == UIGestureRecognizerStateBegan) {
// Write your code here
}
}