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

时间:2012-05-15 17:19:04

标签: ios cocoa-touch uidocumentinteraction qlpreviewcontroller

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

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

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

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

2 个答案:

答案 0 :(得分: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仍然会收到所有其他非抽头触摸事件,这样用户仍然可以与文档进行交互

答案 1 :(得分:0)

子类QLPreviewController然后覆盖

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

就是这样!