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

bas*_*elq 6 cocoa-touch ios qlpreviewcontroller uidocumentinteraction

好的,所以我要做的是创建一个类似这张图片的文档查看器: 在此输入图像描述

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

我已经进行了子类化QLPreviewController,并设法利用已经附带的(顶部)导航栏QLPreviewController.这很好用.现在,我需要在显示顶部栏时显示底栏.我可以UIToolbar在页面底部添加一个,但是我需要拦截触摸事件,这样我就可以隐藏/取消隐藏底栏.我似乎无法弄清楚如何让它工作.我尝试添加一个子类本身UITapGestureRecognizer的视图,QLPreviewController没有运气.我还尝试创建一个覆盖UIView,UITapGestureRecognizer但有一个阻止用户表单与下面的文档交互.

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

bas*_*elq 3

好吧,我知道问题出在哪里了UITapGestureRecognizer。您需要将委托设置为 self,然后覆盖

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

函数并返回 yes。因此,在我的 QLPreviewController 子类中,我实现了 UIGestureRecognizerDelegate,并在 viewWillAppear 中:

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

然后简单地:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

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