手势冲突UITableView滑动删除iOS
我的手势识别器有问题。 我的目标是实施使用滑动删除在我的表格视图。 但我认为其他手势是相互冲突的。 我正在使用这个libray romaonthego / REFrostedViewController这个库为我的汉堡包菜单,这个库有一个pangesturefunction。 我认为冲突是在手势中。 因为当我运行我的tableview在另一个项目中的代码它正在工作。请帮助,预先感谢您。
我也有类似的问题,我最终做的和TonyMkenu类似,但是还有更多的识别器需要允许:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { if (otherGestureRecognizer.delegate == self ) return NO; //if otherGestureRecognizer is swipe to delete from a UITableView cancel slide menu recognizers if ([[otherGestureRecognizer.view class] isSubclassOfClass:[UITableView class]]) { NSLog(@"Allow1 %@", [otherGestureRecognizer description]); return YES; } if( [[otherGestureRecognizer.view class] isSubclassOfClass:[UITableViewCell class]] || [NSStringFromClass([otherGestureRecognizer.view class]) isEqualToString:@"UITableViewCellScrollView"] || [NSStringFromClass([otherGestureRecognizer.view class]) isEqualToString:@"UITableViewWrapperView"]) { NSLog(@"Allow&Disable %@", [otherGestureRecognizer description]); if(gestureRecognizer.delegate == self) {//cancel the slide menu recognizer gestureRecognizer.enabled = NO; gestureRecognizer.enabled = YES; } return YES; } NSLog(@"Deny %@", [otherGestureRecognizer description]); return NO;
}
编辑:更新了iOS 11
其他答案是有帮助的,但在我的情况下,最好的解决办法是做shouldRequireFailureOfOtherGesture
逻辑像这样:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { if (gestureRecognizer == self.pan) { return YES; } return NO; } - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRequireFailureOfGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { if (gestureRecognizer == self.pan) { // iOS 10 if ([NSStringFromClass([otherGestureRecognizer.view class]) isEqualToString:@"UITableViewWrapperView"]) { return YES; } // iOS 11 else if ([otherGestureRecognizer isMemberOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer.view isKindOfClass:[UITableView class]]) { return YES; } } return NO; }
这在我的情况下有更好的行为。 我也在我的平移手势上使用了delaysTouchesBegan = YES
。 可能会有用!
首先…检查你是否有这个
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { // Return NO if you do not want the specified item to be editable. return YES; }
和第二…
尝试添加这个
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { if ([gestureRecognizer.view isKindOfClass:[UITableView class]]) { return YES; } else { return NO; } }
在iOS 11中,希望这可以帮助你。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { if ([[otherGestureRecognizer.view class] isSubclassOfClass:[UITableView class]]) { if ([otherGestureRecognizer isKindOfClass: [UIPanGestureRecognizer class]]) { UIPanGestureRecognizer *otherPan = (UIPanGestureRecognizer *)otherGestureRecognizer; CGPoint translation = [otherPan translationInView:otherGestureRecognizer.view]; return translation.x < 0; } } return NO; }