ios - 可以拦截触摸事件的自定义 QLPreviewController 或 UIDocumentInteractionController

标签 ios cocoa-touch uidocumentinteraction qlpreviewcontroller

好的,所以我想做的是创建一个类似于这张图片的文档查看器: enter image description here

基本上应该发生的是,当屏幕的任何地方被点击时,顶部和底部的栏就会出现。再次点击它们就会消失。

我对 QLPreviewController 进行了子类化,并设法利用了 QLPreviewController 自带的(顶部)导航栏。这很好用。现在我需要在显示顶部栏时显示底部栏。我可以将 UIToolbar 添加到页面底部,但我需要拦截触摸事件,以便隐藏/取消隐藏底部栏。我似乎无法弄清楚如何让它工作。我尝试将 UITapGestureRecognizer 添加到 QLPreviewController 子类本身的 View 中,但没有成功。我还尝试创建一个覆盖层 UIView,它有一个 UITapGestureRecognizer,但这会阻止用户表单与下面的文档进行交互。

有人对如何做到这一点有任何想法吗?提前致谢!

最佳答案

好的,我弄清楚了 UITapGestureRecognizer 的问题所在。您需要将委托(delegate)设置为 self ,然后覆盖

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

函数并返回是。所以在我的 QLPreviewController 子类中,我实现了 UIGestureRecognizerDelegate,并在 viewWillAppear 中:

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(documentTapped:)];
tapGesture.cancelsTouchesInView = NO;
tapGesture.delegate = self;
[self.view addGestureRecognizer:[tapGesture autorelease]];

然后简单地:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

这样,QLPreviewController 仍将接收所有其他非点击触摸事件,以便用户仍然可以与文档进行交互

关于ios - 可以拦截触摸事件的自定义 QLPreviewController 或 UIDocumentInteractionController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10605745/

相关文章:

ios - OpenGLES阴影体积

ios - iOS 是否查找特定于区域的 .lproj 目录(例如 en_US.lproj)?

ios - 如何获取在prepareForSegue中启动segue的按钮?

ios - 如何将其他内容保存到我的 UIManagedDocument 文件包中?

ios - 如果有另一个应用程序支持该文件类型,则 UIDocumentInteractionController 文件不会附加到 Mail

ios - 在另一个应用程序中打开文件时更改 UIDocumentInteractionController 中的文件名

ios - 根据单元格不改变单元格高度动态地更改UICollectionView高度

javascript - 如何在 Ionic 3 中重定向硬件后退按钮?

ios - 如何在iOS中将\u00e2\u0080\u0099这个字符串替换成'

cocoa - 计算当前时间和下一个事件之间的秒数