【问题标题】:Catch all touch events in UIView?捕获 UIView 中的所有触摸事件?
【发布时间】:2011-08-12 01:59:08
【问题描述】:

我希望每次用户在我的应用程序中触摸屏幕时重置一个计时器(所以我知道用户仍在使用该设备)。我已经在我的 ViewController 中实现了 touchBegan。

问题是,如果我的 ViewController 中有一个 UITableView 并且用户触摸了 UITableView,那么函数 touchBegan 就永远不会被调用。原因是 tableView 没有传递触摸事件。

据我所知,您可以将 UITableView 子类化以将其传递给它的超级视图,或者在顶部添加一个仅捕获触摸事件并传递它们的透明 UIView。子类化的问题是我需要在所有捕获触摸事件的类上进行。

有没有更好的解决方案?如果不是,您如何将事件传递给它的超级视图?

【问题讨论】:

    标签: iphone objective-c ios4 ipad


    【解决方案1】:

    在我的脑海中,您可以继承 UIWindowUIApplication 并覆盖 sendEvent:(UIEvent *)event 并从那里采取行动。

    例如(如果你覆盖UIApplication

    - (void)sendEvent:(UIEvent *)event {
       if (event.type == UIEventTypeTouches)
          [(YourApplicationDelegate *)self.delegate wakeUp:event];
       [super sendEvent:event];
    }  
    

    这对于您正在尝试做的事情可能有点侵入性。希望看到一些其他的想法。

    【讨论】:

    • 它实际上就像我想要的那样工作,问题是我似乎没有找到一种方法来检测它是否是 touchBegan。 Atm 如果我在滚动视图中滚动,则唤醒被调用 20-30 次。
    • 回答我自己的问题:UITouch *touch = [event allTouches].anyObject; if (touch.phase == UITouchPhaseBegan) {
    • 这在 iOS7 中不再适用于我。请参阅下面的答案,了解我是如何工作的。
    【解决方案2】:

    上述解决方案不再适用于 iOS 7。

    如果您只想知道屏幕何时被触摸,请将以下内容放入您的 ViewController.m 文件中...

    - (BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer 
                                                    shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer*)otherGestureRecognizer
    {
      if (otherGestureRecognizer.state == UIGestureRecognizerStateBegan)
      {
        // yes, it was touched!
      }
      return YES;
    }
    

    【讨论】:

      【解决方案3】:

      我认为你不应该仅仅为了处理触摸事件而继承 UIScrollView(或 UITableView - 从 UIScrollView 扩展),因为还有一些其他方法可以完成你可能在清洁器中寻找的东西方式。

      当使用UISCrollViewMKMapView(也不传递触摸事件)时,我通常使用 UIGestureRecognizer 来捕获我正在寻找的特定触摸事件。

      对于某些特定情况,由于处理屏幕上的UITableView 触摸只是为了关闭键盘,我在textViewDidBeginEditing UITextView 委托方法中将UIScrollView 属性userInteractionEnable 设置为NO ,然后在textViewDidEndEditing 处将userInteractionEnable 设置为YES。这样做将使我能够在不继承任何内容的情况下捕获touchesBegan

      【讨论】:

        猜你喜欢
        • 2018-04-17
        • 1970-01-01
        • 1970-01-01
        • 2020-05-27
        • 2012-01-22
        • 2011-05-07
        • 1970-01-01
        • 2016-12-02
        • 1970-01-01
        相关资源
        最近更新 更多