UIPageViewController捕获所有UITapGestureRecognizer事件

Hoo*_*cat 5 objective-c uiview addsubview uitapgesturerecognizer uipageviewcontroller

在键盘上度过了漫长的一天,所以我伸出手:-)

我有一个UIPageViewController典型的实现,基本上遵循Apple的标准模板.我正在尝试添加一个叠加层,允许用户执行操作,例如触摸按钮跳转到某些页面或关闭视图控制器以转到应用程序的其他部分.

我的问题是UIPageViewController从我的叠加子视图中捕获所有事件,我正在努力寻找可行的解决方案.

这里有一些代码来帮助这个例子......

在viewDidLoad中

// Page creation, pageViewController creation etc....

self.pageViewController.delegate = self;

[self.pageViewController setViewControllers:pagesArray
                                  direction:UIPageViewControllerNavigationDirectionForward
                                   animated:NO
                                completion:NULL];

self.pageViewController.dataSource = self;

[self addChildViewController:self.pageViewController];
[self.view addSubview:self.pageViewController.view];

// self.overlay being the overlay view

if (!self.overlay) 
{
   self.overlay = [[MyOverlayClass alloc] init];  // Gets frame etc from class init
   [self.view addSubview:self.overlay];
}
Run Code Online (Sandbox Code Playgroud)

一切都很好.叠加层被创建,它会显示在UIPageViewController您期望的页面顶部.当页面翻转时,它们会在叠加层下方翻转 - 再次正如您所期望的那样.

然而,UIButtons在中self.overlay视从未获得点击事件.该UIPageViewController响应的所有事件.

我已经尝试过-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch根据这些建议而没有成功.

UIPageViewController手势识别器

我已经尝试手动捕获所有事件并自己处理它们 - 不起作用(说实话,即使它确实看起来有点像黑客).

有没有人有关于如何捕获事件的建议,或者可能是更好的方法来使用叠加在顶部UIPageViewController.

任何和所有的帮助非常感谢!!

Bas*_*awy 3

尝试迭代UIPageViewController.GestureRecognizers并分配self为这些手势的委托并实施

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;
Run Code Online (Sandbox Code Playgroud)

你的代码可能是这样的:

在 viewDidLoad 中

for (UIGestureRecognizer * gesRecog in self.pageViewController.gestureRecognizers)
{
        gesRecog.delegate = self;
}
Run Code Online (Sandbox Code Playgroud)

并添加以下方法:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    if (touch.view != self.pageViewController.view]
    {
        return NO;
    }
    return YES;
}
Run Code Online (Sandbox Code Playgroud)