UITableViewcell 和 UITableVIew 上的手势识别器
Posted
技术标签:
【中文标题】UITableViewcell 和 UITableVIew 上的手势识别器【英文标题】:gesture recognizers on both UITableViewcell and UITableVIew 【发布时间】:2013-06-09 10:59:13 【问题描述】:我有一个简单的 UITableViewCell 实现。 我已经为 UIPanGestureRecognizer 注册了 UITableViewCell 的这个子类,我用它来向右或向左滑动单元格。
//在UITableViewCell子类中:
UIGestureRecognizer* recognizer =
[[UIPanGestureRecognizer alloc] initWithTarget:
self
action:@selector(handlePan:)];
recognizer.delegate = self;
[self addGestureRecognizer:recognizer];
recognizer.cancelsTouchesInView = NO;
现在我想在用户用两根手指“向上”滑动时呈现一个视图控制器 屏幕上。 所以,我在 tableview 中添加了一个 UISwipeGestureRecognizer。
// 包含 tableview 引用的视图控制器中的代码。
UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleViewsSwipe:)];
[swipe setDirection:UISwipeGestureRecognizerDirectionUp];
[swipe setDelaysTouchesBegan:NO];
[[self tableView ]addGestureRecognizer:swipe];
swipe.cancelsTouchesInView= YES;
[swipe setNumberOfTouchesRequired:2];
swipe.delegate = self;
self.tableView.multipleTouchEnabled = YES;
但是当我在屏幕上用两根手指滑动时,会触发平移手势。 我该如何解决这个问题?
【问题讨论】:
这可能是因为您没有为UIPanGestureRecognizer
设置maximumNumberOfTouches
属性。设置recognizer.maximumNumberOfTouches = 1;
【参考方案1】:
正如 sooper 所说,设置 maximumNumberOfTouches = 1 可能会起作用。
对于尝试同时处理 2 个手势识别器的其他人,这两个手势都是 1 个触摸手势,我发现确保将此委托设置为是
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
return YES;
然后在手势识别器操作中,您可以检查某个翻译或您需要的任何内容并取消其中一个手势识别器。
如:
- (void)panSwipeRecognizer:(UIPanGestureRecognizer*)panRecognizer
CGPoint translation = [panRecognizer translationInView:self.superview];
if(panRecognizer.state == UIGestureRecognizerStateBegan)
if(fabsf(translation.x) < fabsf(translation.y))
//deactivate horizontal gesture recognizer
panRecognizer.enabled = NO;
panRecognizer.enabled = YES;
else //if(fabsf(translation.x) > fabsf(translation.y))
//deactivate vertical gesture recognizer
otherGestureRecognizer.enabled = NO;
otherGestureRecognizer.enabled = YES;
//other statements like stateChanged and stateBegan
【讨论】:
以上是关于UITableViewcell 和 UITableVIew 上的手势识别器的主要内容,如果未能解决你的问题,请参考以下文章
如何将文本包装在 Iphone 的 UITable 单元格中?
将 IBOutlets 连接到 UITableViewCell 原型
以编程方式在 UITableViewCell 下添加 UITextView 和 UIImageView Swift 4