好的,所以我想做的是创建一个类似于这张图片的文档查看器:
基本上应该发生的是,当屏幕的任何地方被点击时,顶部和底部的栏就会出现。再次点击它们就会消失。
我对 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/