gpt4 book ai didi

ios - 有没有办法检测屏幕键盘上的触摸?

转载 作者:行者123 更新时间:2023-12-01 17:33:28 25 4
gpt4 key购买 nike

我不在乎按下了哪个键,按下了多长时间,或者类似的东西。我所需要的只是一种检测用户是否触摸了屏幕的方法,即使它恰好位于被键盘覆盖的屏幕部分。

我的目标是检测缺少交互以将应用程序“重置”到默认状态,如果离开足够长的时间 - 考虑一个“信息亭模式”应用程序。问题是我无法检测到键盘何时被触摸,因为键盘显然会拦截所有触摸事件,甚至在我的客户窗口可以处理它们之前。

编辑:

考虑(并忽略)仅使用键盘显示和隐藏通知——如果用户正在积极打字,我们需要延长屏幕显示。由于我们使用 UIWebViews 来显示某些东西,所以我们也不能使用 UITextViews 或 UITextFields 的委托(delegate)方法。

最佳答案

听起来好像检测到键盘和其他地方的所有触摸就足够了。我们可以通过继承 UIApplication 来做到这一点覆盖 sendEvent: .

我们将扩展 UIApplicationDelegate带有新消息的协议(protocol),application:willSendTouchEvent: ,我们将使我们的UIApplication子类在处理任何触摸事件之前将消息发送给它的委托(delegate)。

我的应用程序.h

@interface MyApplication : UIApplication
@end

@protocol MyApplicationDelegate <UIApplicationDelegate>
- (void)application:(MyApplication *)application willSendTouchEvent:(UIEvent *)event;
@end

我的应用程序.m
@implementation MyApplication

- (void)sendEvent:(UIEvent *)event {
if (event.type == UIEventTypeTouches) {
id<MyApplicationDelegate> delegate = (id<MyApplicationDelegate>)self.delegate;
[delegate application:self willSendTouchEvent:event];
}
[super sendEvent:event];
}

@end

我们需要让我们的应用委托(delegate)符合 MyApplicationDelegate协议(protocol):

AppDelegate.h
#import "MyApplication.h"

@interface AppDelegate : UIResponder <MyApplicationDelegate>
// ...

AppDelegate.m
@implementation AppDelegate

- (void)application:(MyApplication *)application willSendTouchEvent:(UIEvent *)event {
NSLog(@"touch event: %@", event);
// Reset your idle timer here.
}

最后,我们需要让应用程序使用我们新的 MyApplication类(class):

主文件
#import "AppDelegate.h"
#import "MyApplication.h"

int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv,
NSStringFromClass([MyApplication class]),
NSStringFromClass([AppDelegate class]));
}
}

关于ios - 有没有办法检测屏幕键盘上的触摸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12361423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com