2011-09-28 57 views
10

我希望有人能够帮助我解决目前正在做我的头的问题!在UIScrollView里面检测UITableViewCell上的滑动手势

给出下面的视图层次

enter image description here

我希望能够检测我的自定义的UITableViewCell滑动手势。

我已经子类的的UIScrollView和有则hitTest:withEvent:方法方法来检查我是否触摸的tableview细胞(或其内容)或没有,在这种情况下我设置以下滚动视图属性:

- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    UIView* result = [super hitTest:point withEvent:event]; 
    if ([result.superview isKindOfClass:[UITableViewCell class]] || [result.superview tag] == SUBVIEW_TAG) 
    { 
     self.canCancelContentTouches = NO; 
     self.delaysContentTouches = YES; 
    } else { 
     self.canCancelContentTouches = YES; 
     self.delaysContentTouches = NO; 
    } 
    return result; 
} 

我还实施:

- (BOOL)touchesShouldCancelInContentView:(UIView *)view 
{ 
    if (view.tag == SUBVIEW_TAG || [[view superview] isKindOfClass:[UITableViewCell class]]) 
     return NO; 
    return YES; 
} 

而且是回在NO的情况被触摸的观点是表视图单元格。

这些方法都被调用,并按预期执行它们的操作,但我仍然无法阻止UIScrollView“挥霍”滑动手势。

有趣的是,如果我在上面的两个方法(包含SUBVIEW_TAG的那个)上包含了包含tableview和cell的UIView,它完美的工作,所以我猜测它必须与UITableView从UIScrollView继承。

我的主要目标是能够在单元上滑动以显示更多细胞选项。在该视图的任何其他位置的水平滑动将被滚动视图捕获,并按照其正常行为水平移动内容。

任何想法将非常感激!

谢谢! 罗格

+0

是否不足以将手势识别器添加到UITableViewCell? – teriiehina

+0

你有没有解决这个问题? 如果是这样,你介意分享你的解决方案吗?你已经很好地详细描述了问题 - 以类似的方式回答会非常棒! – iOSProgrammingIsFun

+0

是的,这是一个很棒的解决方案 – Pasta

回答

2

我有一个类似的问题与刷卡检测为滚动视图中的组成部分,我能够与

[scrollView.panGestureRecognizer requireGestureRecognizerToFail:swipeGesture] 

哪里滚动视图是一个行为象容器和swipeGesture滚动视图目的是解决这个问题滚动视图中的组件轻扫手势对象。

所以,你可以(在本例右轻扫,自定义它,只要你想)定义为这样的细胞对象轻扫

UISwipeGestureRecognizer* rightSwipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(yourMethod)]; 
     [rightSwipeRecognizer setDirection:UISwipeGestureRecognizerDirectionLeft]; 

[cell addGestureRecognizer:rightSwipeRecognizer]; 

,然后做

[scrollView.panGestureRecognizer requireGestureRecognizerToFail:rightSwipeRecognizer] 

文档requireGestureRecognizerToFail说:

此方法创建与另一个手势识别器的关系,它将接收器的转换延迟到 UIGestureRecognizerStatePossible。接收机 过渡到依靠什么与otherGestureRecognizer发生的状态:

如果otherGestureRecognizer过渡到 UIGestureRecognizerStateFailed,接收器转变到正常 下一个状态。

如果otherGestureRecognizer转变到 UIGestureRecognizerStateRecognized或UIGestureRecognizerStateBegan, 接收机转换到UIGestureRecognizerStateFailed。

可能会调用此方法的示例是,当您想要单击手势时需要双击手势失败。

Availability在iOS 3.2及更高版本中提供。

希望有所帮助!

2

该解决方案非常简单。您只需在UITableViewCell的内添加UIScrollView 即可。它将防止在滑动手势中出现“h”“效果。

Embedded UIScrollView

相关问题