我希望当用户在UITableView上向下滑动方向时,我会做一些事情并且表格不会滚动。我怎么能这样做?
答案 0 :(得分:3)
如果您只想让UISwipeGestureRecognizer
与UITableView UIPanGestureRecognizer
一起发射,则只需设置滑动手势的代理并实施
- (BOOL) gestureRecognizer:(UIGestureRecognizer *) gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *) otherGestureRecognizer
然后返回YES
。
如果要中断tableview的平移手势,可能无法使用UISwipeGestureRecognizer
这样做,因为在用户刷过一定距离之前它实际上不会触发。
但是,如果需要,您可以使用UIPanGestureRecognizer
伪造该行为。我能够得到类似的东西:
#pragma mark UIViewController lifecycle
- (void) viewDidLoad
{
[super viewDidLoad];
UIPanGestureRecognizer *panner = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(didPan:)];
[panner setDelegate:self];
[panner setMinimumNumberOfTouches:2];
[self.tableView addGestureRecognizer:panner];
}
#pragma mark custom swipe response
- (void) didSwipe
{
NSLog(@"SWIPED!");
}
#pragma mark UIPanGestureRecognizer response
- (void) didPan:(UIPanGestureRecognizer *) recognizer
{
[self cancelGestureRecognizer:self.tableView.panGestureRecognizer];
if (recognizer.state == UIGestureRecognizerStateChanged)
{
CGPoint translation = [recognizer translationInView:self.view];
if (translation.y > 20)
{
[self didSwipe];
[self cancelGestureRecognizer:recognizer];
}
}
}
#pragma mark UIGestureRecognzierDelegate implementation
- (BOOL) gestureRecognizer:(UIGestureRecognizer *) gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *) otherGestureRecognizer
{
//NOTE: blindly returning yes in this case is usually a bad idea. You should check the recognizers here.
return YES;
}
#pragma mark UIGestureRecognizer stuff that should be in a category and not this file.
- (void) cancelGestureRecognizer:(UIGestureRecognizer *) recognizer
{
if (recognizer.enabled)
{
[recognizer setEnabled:NO];
[recognizer setEnabled:YES];
}
}
也就是说,在大多数情况下,只需使用平移手势并根据平移距离进行任何动画/转换/交互,就可以获得更好的用户体验(在这种情况下是CGPoint translation
)。
答案 1 :(得分:0)
试试这个:
self.tableView.panGestureRecognizer.maximumNumberOfTouches = 1;