我正在使用ECSliding框架开发应用程序。一切顺利,直到我添加UItableViewController作为topViewController为止。尝试滚动静态表格视图时遇到错误。我可以确定问题出在哪里,但我不知道如何解决。如果删除以下命令(在viewDidLoad方法中声明),我的UITableView开始正常滚动。

 [self.view addGestureRecognizer:self.slidingViewController.panGesture];

用于将UITableViewController设置为topViewController的代码
 self.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Driver"];
topViewControllerECSlidingViewController的属性

我在另一篇文章中发现了另一个类似的问题,但是那家伙正在使用UINavigationController作为topViewController

请让我知道是否有人可以帮我。

谢谢,
马科斯

最佳答案

我看到您已经解决了您的问题,但也评论其他人也在寻找此解决方案,因此,我将提供一些有关此信息。

这里的问题是,当您向UITableView子类添加平移手势时,它将与当前用于滚动的手势混淆。当您平移时,它不再知道您要做什么,最终可能会出现不一致的行为(或您不希望的行为)。

有两种不同的解决方案可能会根据您的实际需求而起作用:

ONE:

如果您成为UIGestureRecognizerDelegate,则可以实现该方法:

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

这使您可以侦听多个手势。只要确保将手势的代表设置为self
TWO:

如果您指定希望新手势实现的方向,则可能会停止滚动问题:
   UISwipeGestureRecognizer* swipe;

   swipe = [[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeL)] autorelease];
   swipe.direction = UISwipeGestureRecognizerDirectionLeft;
   [view addGestureRecognizer:swipe];

   swipe = [[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeR)] autorelease];
   swipe.direction = UISwipeGestureRecognizerDirectionRight; // default
   [view addGestureRecognizer:swipe];

显然,这是使用滑动方式,但可以轻松对其进行修改。这表示您不想担心垂直手势,可以允许表格继续其默认行为。但是,您可能仍然需要在ONE中实现委托方法,以验证它侦听多个手势。

10-08 06:00