在键盘上度过了漫长的一天,所以我伸出手: - )
我在典型的实现中有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
页面的顶部。当页面翻转时,它们会在叠加层下方翻转 - 再次正如您所期望的那样。
但是,UIButtons
视图中的self.overlay
永远不会获得点击事件。 UIPageViewController
响应所有事件。
我已尝试按照此处的建议覆盖-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
但未成功。
UIPageViewController Gesture recognizers
我试过手动捕获所有事件并自己处理它们 - 不起作用(说实话,即使这样做看起来有点像黑客)。
是否有人建议如何捕捉事件,或者更好的方法在UIPageViewController
的顶部使用叠加层。
非常感谢任何和所有帮助!!
答案 0 :(得分: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;
}
答案 1 :(得分:0)
阻止UIPageViewController
滚动的文档化方法是不分配dataSource
属性。如果您分配数据源,它将进入“基于手势”的导航模式,这是您要阻止的。
如果没有数据源,您可以使用setViewControllers:direction:animated:completion
方法手动提供视图控制器,并且它将根据需要在视图控制器之间移动。
上述内容可以从Apple's documentation of UIPageViewController(概述,第二段)推断出来:
要支持基于手势的导航,您必须使用数据源对象提供视图控制器。