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

6
好的,我正在尝试创建一个类似于这张图片的文档查看器: enter image description here 基本上,当屏幕任何地方被点击时,顶部和底部栏应该出现。再次点击,它们就会消失。
我已经对 QLPreviewController 进行了子类化,并成功利用了 QLPreviewController 已经带有的(顶部)导航栏。这个可以正常工作。现在我需要让底部栏在显示顶部栏时显示。我可以将 UIToolbar 添加到页面底部,但我需要拦截触摸事件,以便我可以隐藏/显示底部栏。我似乎无法弄清楚如何使其工作。我尝试将 UITapGestureRecognizer 添加到 QLPreviewController 子类本身的视图中,但没有成功。我还尝试创建一个覆盖 UIView,它具有 UITapGestureRecognizer,但这样会阻止用户与文档下面的内容进行交互。有人有任何关于如何做到这一点的想法吗?谢谢!
2个回答

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]];

那么只需简单地执行以下步骤:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

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

0

子类化QLPreviewController,然后覆盖重写

-(void)contentWasTappedInPreviewContentController:(id)item {}

就是这样!


很遗憾,这似乎不是一个有价值的解决方案,因为苹果认为它是私有API。请参见https://dev59.com/sFfUa4cB1Zd3GeqPIHXX#lfsMoYgBc1ULPQZFkU-j。 - Lifely

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接