objective-c - UIPageViewController 捕获所有 UITapGestureRecognizer 事件

标签 objective-c uiview addsubview uipageviewcontroller uitapgesturerecognizer

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

我有一个 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/

相关文章:

iphone - 添加 subview 时,如果应用程序处于横向模式, View 不会调整大小

objective-c - 从主视图更改 subview 上的 UILabel 文本

iphone - UIPageViewController 在 iOS 6 中不返回任何手势识别器

javascript - 如何从 div 标签表示的表中检索行和列数据

swift - Model View Controller 中 TableView 的最佳实现

SWIFT:无法单击 subview

iphone - UIViewController 删除 subview

objective-c - Objective-C 中的计算

C++ 到 Objective-C,在 for 循环中使用 const int

iphone - UIView 动画 block 不做任何更改