当用户滑动手势两次触摸时,如何防止UITableView中的scrollview?

时间:2014-07-27 17:04:14

标签: ios uitableview uiswipegesturerecognizer

我希望当用户在UITableView上向下滑动方向时,我会做一些事情并且表格不会滚动。我怎么能这样做?

2 个答案:

答案 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;