Cocoa touch UIgestureRecognitor阻止表视图滚动
我正在使用一个自定义的Cocoa touch UIgestureRecognitor阻止表视图滚动,cocoa-touch,uiview,ipad,uigesturerecognizer,Cocoa Touch,Uiview,Ipad,Uigesturerecognizer,我正在使用一个自定义的UIgestureRecognitor子类来跟踪InfoView类中的手势。InfoView类是名为InfoCell的自定义UITableViewCell子类的子视图 我已将我的手势识别器添加到我的根视图(屏幕上所有其他内容的父视图,因为我的自定义手势识别器的目的是允许在表之间拖动InfoCell视图)。现在,除了一件事,一切都正常运转。我在UIgestureRecognitizer子类中使用以下代码来检测InfoView视图上的触摸: - (void)touchesBeg
UIgestureRecognitor
子类来跟踪InfoView
类中的手势。InfoView
类是名为InfoCell
的自定义UITableViewCell
子类的子视图
我已将我的手势识别器添加到我的根视图(屏幕上所有其他内容的父视图,因为我的自定义手势识别器的目的是允许在表之间拖动InfoCell
视图)。现在,除了一件事,一切都正常运转。我在UIgestureRecognitizer
子类中使用以下代码来检测InfoView
视图上的触摸:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UIView *touchView = [[touches anyObject] view];
if ([touchView isKindOfClass:[InfoView class]]) {
// Do stuff
}
这里的问题是,InfoView
对象上的接触被拦截,因此它们没有被转发到UITableView
,后者包含InfoCell
,这是InfoView
的父视图。这意味着我不能再通过拖动InfoView
视图来滚动表视图,这是一个问题,因为InfoView
覆盖了整个InfoCell
是否有任何方法可以将触摸转发到表格视图,以便它可以滚动?我已经尝试了很多方法:
[超级触摸开始:触摸事件:事件]代码>
[touchView.superview.superview touchsbegind:touchswithevent:event]
(touchView.superview.superview
获取对其父级的引用UITableView
)
但到目前为止,一切都不起作用。此外,myUIgestureRecognitor
的cancelsTouchesInView
属性设置为NO
,因此不会干扰触摸
谢谢你的帮助。谢谢 我的touchsbegind
方法中有一行代码将手势识别器的state
属性设置为UIgestureRecognitizerStateSbegind
。删除这一行似乎可以解决问题。UIGestureRecognizer的属性“cancelsTouchesInView”默认设置为“是”。这意味着当识别手势时,UIView中的触摸将被取消。尝试将其设置为“否”,以允许UIScrollView接收更多触摸事件。检查UIgestureRecognitizer委托方法:-(BOOL)GestureRecognitizer:(UIgestureRecognitizer*)GestureRecognitizer应与GestureRecognitizer:(UIgestureRecognitizer*)OtherGestureRecognitizer同时识别
如果返回YES,将阻止您的手势识别器在UIScrollView用于检测滚动的手势识别器上跺脚。您可以尝试添加此通知
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
if ([gestureRecognizer class] == [UIPanGestureRecognizer class]) {
UIPanGestureRecognizer *panGestureRec = (UIPanGestureRecognizer *)gestureRecognizer;
CGPoint point = [panGestureRec velocityInView:self];
if (fabsf(point.x) > fabsf(point.y) ) {
return YES;
}
}
return NO;
}
在这件事上,我的头一直撞在墙上。谢谢D这是正确的答案,如果手势是垂直的,请防止泛感觉开始。