5

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

我有一个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];
}

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

但是,视图UIButtonsself.overlay永远不会获得点击事件。UIPageViewController响应所有事件。

我已尝试-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch根据此处的建议覆盖但没有成功。

UIPageViewController 手势识别器

我已经尝试手动捕获所有事件并自己处理它们 - 不起作用(老实说,即使它这样做似乎有点像黑客)。

有没有人有关于如何捕获事件的建议或者更好的方法来使用覆盖在UIPageViewController.

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

4

2 回答 2

3

尝试迭代UIPageViewController.GestureRecognizers并指定self为这些手势的代表并实现

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;

你的代码可能是这样的:

在 viewDidLoad

for (UIGestureRecognizer * gesRecog in self.pageViewController.gestureRecognizers)
{
        gesRecog.delegate = self;
}

并添加以下方法:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    if (touch.view != self.pageViewController.view]
    {
        return NO;
    }
    return YES;
}
于 2012-11-10T09:32:26.073 回答
0

防止UIPageViewController滚动的记录方法是不分配dataSource属性。如果您分配数据源,它将进入“基于手势”的导航模式,这是您试图阻止的。

如果没有数据源,您可以在需要使用setViewControllers:direction:animated:completion方法时手动提供视图控制器,它会根据需要在视图控制器之间移动。

以上可以从苹果的 UIPageViewController 文档中推导出来(Overview,第二段):

要支持基于手势的导航,您必须使用数据源对象提供视图控制器。

于 2015-06-07T00:16:39.943 回答