【问题标题】:Custom QLPreviewController or UIDocumentInteractionController that can intercept touch events可以拦截触摸事件的自定义 QLPreviewController 或 UIDocumentInteractionController
【发布时间】:2012-05-15 17:19:03
【问题描述】:

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

基本上应该发生的事情是,当在屏幕的任意位置点击时,会出现顶部和底部栏。再次点击,它们就会消失。

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

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

【问题讨论】:

    标签: ios cocoa-touch uidocumentinteraction qlpreviewcontroller


    【解决方案1】:

    好的,我发现了UITapGestureRecognizer 的问题所在。你需要将delegate设置为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 仍将接收所有其他非点击触摸事件,以便用户仍然可以与文档交互

    【讨论】:

      【解决方案2】:

      子类QLPreviewController然后覆盖

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

      就是这样!

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 2020-04-17
      • 2014-09-11
      相关资源
      最近更新 更多