Screen Edge Pan Gesture + Table View同时滚动

时间:2016-12-22 14:56:48

标签: ios objective-c uitableview scroll swipe

我有一个UITableView,它在列表中显示一堆用户。这可以通过前一个View Controller的简单Push segue加载。 我面临一个奇怪的问题,如果我尝试将ScreenEdgePanGesture用于Swipe to go back,并在拖动时停止,我也可以上下移动,这会导致TableView滚动。我上传了一张图片,上面显示了我描述的状态。此时,我可以左右移动并执行Swipe to go back手势,但我也可以向上移动并滚动表格。

我想在拖动屏幕被解除时禁用TableView滚动。

enter image description here

我已尝试添加代码以禁用多个手势识别器,但这似乎没有效果。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return NO;
}

有什么方法可以禁用这种行为? 我想提一下,我已经在其他屏幕上观察到了所需的行为,一旦拖动手势开始,TableView就会被锁定。不幸的是,我无法辨别故事板中类或安排的实现方面的任何差异。通过查看SO问题,我注意到正确和原生的行为是我想要的。但是,我上面发布的屏幕表现得与看似不同的标准不同。我无法确定它的任何特性。

有关故障TableView设置的额外信息。也许有人可以发现错误。

http://imgur.com/a/ajF59 http://imgur.com/a/uoRB7

我添加了一个额外的视频来进一步显示问题。我希望这更有意义:https://vid.me/Tp34

非常感谢!

1 个答案:

答案 0 :(得分:0)

我终于找到了解决方案。我不确定导致这种行为的原因,但是如果有人仍然在努力解决这个问题,我就是这样做来禁止TableView滚动:

在我的视图中添加了ScreenEdgePanRecognizer:

self.panRecognizer = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(didPan)];
[self.panRecognizer setEdges:UIRectEdgeLeft];
[self.view addGestureRecognizer:self.panRecognizer];

然后,我添加了一种方法,可以在您开始拖动时立即停用滚动功能,并在您完成手势后立即重新启用:

- (void)didPan {
    self.tableView.scrollEnabled = NO;
    if ([self.panRecognizer state] == UIGestureRecognizerStateEnded) {
        self.tableView.scrollEnabled = YES;
    }
}

现在禁用滚动中间手势,但在您完成拖动后恢复它。

相关问题