在键盘上度过了漫长的一天,所以我伸出手:-)
我有一个 UIPageViewController
的典型实现,基本上遵循 Apple 的标准模板。我正在尝试添加一个叠加层,以允许用户执行诸如触摸按钮以跳转到特定页面或关闭 View Controller 以转到应用程序的另一部分之类的操作。
我的问题是 UIPageViewController
捕获了我的覆盖 subview 中的所有事件,我正在努力寻找可行的解决方案。
这里有一些代码来帮助这个例子......
在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
页面的顶部。当页面翻动时,它们会在叠加层下方翻动 - 同样如您所料。
但是,self.overlay
View 中的 UIButtons
永远不会获得点击事件。 UIPageViewController
响应所有事件。
我尝试根据此处的建议覆盖 -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
但没有成功。
UIPageViewController Gesture recognizers
我已经尝试手动捕获所有事件并自己处理它们 - 行不通(老实说,即使它成功了,看起来也有点像 hack)。
有没有人对如何捕获事件有建议,或者有更好的方法在 UIPageViewController
的顶部使用覆盖。
非常感谢任何帮助!!
最佳答案
尝试遍历 UIPageViewController.GestureRecognizers
并将 self
指定为这些手势的委托(delegate)并实现
-(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;
}
关于objective-c - UIPageViewController 捕获所有 UITapGestureRecognizer 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12083124/