检测屏幕上任何位置的触摸

Rem*_*123 4 cocoa-touch objective-c uiresponder uigesturerecognizer ios

我想知道用户何时触摸了我的应用程序屏幕上的任何位置.

我已经研究过使用- (UIResponder*)nextResponder但不幸的是这不起作用,因为我也自动重新加载了一个表,因此当发生这种情况时会触发它.

我还尝试了一个手势识别器,代码如下.但这只会识别视图中的触摸.我有许多按钮,用户将用它来操作应用程序.我想避免在屏幕上的每个按钮和段控件中添加手势识别器或代码

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOnView:)];
[self.mainView addGestureRecognizer:tap];

- (void)tapOnView:(UITapGestureRecognizer *)sender
{
    //do something
}
Run Code Online (Sandbox Code Playgroud)

我也试过- (void)touchesBegan:(NSSet*)触及withEvent:(UIEvent*)事件,但这与手势识别器有同样的问题.

我想知道是否有任何方法可以完成这项任务.我希望我能够从nextResponder中识别出事件的类型,然后我可以检测它是否是按钮.

编辑:我正在处理这个问题的原因是我的应用程序需要保持活动状态,屏幕无法锁定(因此我禁用了屏幕锁定).为了避免过度使用电源,我需要调暗屏幕,但是一旦触摸应用程序,然后将亮度恢复到原始水平.我需要此功能才能在我的一个视图控制器上发生.

dan*_*ham 10

正如Ian MacDonald所提到的,使用它hitTest::是一个很好的解决方案,可以在应用程序范围内检测用户交互,包括选择按钮,文本字段等.

我的解决方案是子类化UIWindow并实现hitTest方法.

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {

   // do your stuff here

   // return nil if you want to prevent interaction with UI elements
   return [super hitTest:point withEvent:event];
}
Run Code Online (Sandbox Code Playgroud)

  • 您是否可以提供有关详细信息的更多信息,而不是如何使用UIWindow的子类-如初始化,在当前窗口上显示它等? (2认同)