滑动手势不在ios 6中的表视图上工作

时间:2013-03-02 13:45:44

标签: iphone ios ipad

我刚刚在tableview上放了一个轻扫手势。但是tableview正在检测20次手势1?为什么会这样发生?

最初我使用下面的代码在另一个控制器上添加了控制器:

obj = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];

CGRect rectFrame = obj.view.frame;
rectFrame.origin.x += 320.0f;
[obj.view setFrame:rectFrame];
[self.view addSubview:obj.view]; 

RootViewController包含一个表格,当我们向左或向右滑动时需要滑动整个视图。

1 个答案:

答案 0 :(得分:3)

有几点想法:

  1. 基本流程:鉴于您将桌面视图添加到右侧,我假设您需要向左滑动才能将其滑动到位。该手势应该在主视图上,而不是表视图。然后假设你想要向右滑动以向后滑动到右边,那么该手势就会出现在你的obj子控制器上。

  2. 处理UIScrollView子类时的标准手势警告:注意,在实际上,在桌面视图上滑动手势并非100%可靠,因为当我们开始左手或右手手势时,一个人的手指很容易向上或向下滑动,然后作为平移视图而不是滑动手势。但这是一个小小的UI问题。 (顺便说一句,这就是为什么应用程序越来越多地将滑动/平移手势添加到屏幕顶部的导航栏,而不是桌面视图本身。)

  3. 优化:如果您使用标准滑动手势,只需将direction设置为UISwipeGestureRecognizerDirectionLeft...Right,那么手势识别器系统可以很好地检测你的手势,处理真实世界的变化等等。如果你有任何代码可以自己验证手势(或者弄乱touches事件),那么你可以看到你的行为描述你的逻辑是否过于严格(例如在y中寻找零变化)。

  4. 最重要的是,如果您仍然遇到问题,请分享您的手势创建代码(如果手势应用条件逻辑,手势代码本身也是如此)。


    与您手头的问题无关,建议您始终让iOS了解您的视图控制器。如果您看到WWDC 2011 - Implementing View Controller Containment,他们会警告您视图层次结构与控制器层次结构不同步的危险。

    简而言之,仅仅将控制器的视图添加为子视图是不够的。幸运的是,修复很简单:您可以实现视图控制器包含。因此,对于add child controller,您需要做的就是在添加子视图之前,请调用:

    [self addChildViewController:obj];
    

    在添加子视图并完成其框架配置后,告诉iOS您已经这样做了:

    [obj didMoveToParentViewController:self];
    

    如果您不进行这两项调用,可能会有iOS事件无法传递给您的视图控制器。