Screen Edge Pan Gesture + Table View 同时滚动
Screen Edge Pan Gesture + Table View Scrolling at the same time
我有一个 UITableView,它在列表中显示了一堆用户。这可以通过一个简单的 Push segue 从以前的 View Controller 加载。
我遇到了一个奇怪的问题,如果我尝试使用 ScreenEdgePanGesture Swipe to go back
,并在拖动时停止,我也可以上下移动,这会导致 TableView 滚动。我在下面上传了一张图片,显示了我正在描述的状态。那时,我可以左右移动并执行 Swipe to go back
手势,但我也可以上下移动并滚动 table.
我想在拖动屏幕以关闭时禁用 TableView 滚动。
我尝试添加代码来禁用多个手势识别器,但这似乎没有效果。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return NO;
}
有什么方法可以禁用此行为吗?
我想提一下,我已经在其他屏幕上观察到所需的行为,其中一旦拖动手势开始,TableView 就会被锁定。不幸的是,我无法辨别 类 的实施或 Storyboard 中的安排有何不同。通过查看 SO 问题,我注意到正确的本机行为是我想要的。但是,我在上面发布的屏幕表现与正常情况不同。我无法确定它有任何特殊之处。
有关故障TableView设置的额外信息。也许有人能发现问题。
http://imgur.com/a/ajF59
http://imgur.com/a/uoRB7
我添加了一个额外的视频来进一步显示问题。我希望这更有意义:https://vid.me/Tp34
非常感谢!
我终于找到了解决办法。我不确定是什么导致了这种行为,但如果有人仍在为此苦苦挣扎,这就是我为禁用 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;
}
}
这现在会禁用滚动中间手势,但会在您完成拖动后恢复它。
我有一个 UITableView,它在列表中显示了一堆用户。这可以通过一个简单的 Push segue 从以前的 View Controller 加载。
我遇到了一个奇怪的问题,如果我尝试使用 ScreenEdgePanGesture Swipe to go back
,并在拖动时停止,我也可以上下移动,这会导致 TableView 滚动。我在下面上传了一张图片,显示了我正在描述的状态。那时,我可以左右移动并执行 Swipe to go back
手势,但我也可以上下移动并滚动 table.
我想在拖动屏幕以关闭时禁用 TableView 滚动。
我尝试添加代码来禁用多个手势识别器,但这似乎没有效果。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return NO;
}
有什么方法可以禁用此行为吗? 我想提一下,我已经在其他屏幕上观察到所需的行为,其中一旦拖动手势开始,TableView 就会被锁定。不幸的是,我无法辨别 类 的实施或 Storyboard 中的安排有何不同。通过查看 SO 问题,我注意到正确的本机行为是我想要的。但是,我在上面发布的屏幕表现与正常情况不同。我无法确定它有任何特殊之处。
有关故障TableView设置的额外信息。也许有人能发现问题。
http://imgur.com/a/ajF59 http://imgur.com/a/uoRB7
我添加了一个额外的视频来进一步显示问题。我希望这更有意义:https://vid.me/Tp34
非常感谢!
我终于找到了解决办法。我不确定是什么导致了这种行为,但如果有人仍在为此苦苦挣扎,这就是我为禁用 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;
}
}
这现在会禁用滚动中间手势,但会在您完成拖动后恢复它。