Is it possible to handle touch events in the key UIWindow in the app Delegate or anywhere else?
Any help would be appreciated please.
Is it possible to handle touch events in the key UIWindow in the app Delegate or anywhere else?
Any help would be appreciated please.
UIWindow is a subclass of UIView, so you simply subclass it and use it in you AppDelegate:
self.window = [[MyWindow alloc] initWithFrame:CGRectMake(0,0,320,480)]; // Sorry for hard-coded frame size!
and in MyWindow you override -hitTest:withEvent: and/or -pointInside:withEvent:
UIWindow
is a subclass of UIResponder
, which has APIs for handling touch events (e.g., touchesBegan:withEvent:
). It is possible then for you to subclass UIWindow, override the touch event handling APIs, and manage the touch events yourself.
There is a handy catch-all method in UIWindow
called sendEvent:
which sees every event near the start of the event-handling pipeline. If you want to do any non-standard additional event handling, this is a good place to put it. Something like this:
- (void)sendEvent:(UIEvent *)event {
if ([self eventIsNoteworthy:event]) [self extraEventHandling:event];
[super sendEvent:event]; // Apple says you must always call this!
}
Docs: UIWindow class reference | iOS event delivery docs
This blog post also mentions how to override hitTest:withEvent:
to catch some events before they're bound to the target leaf subview in the view hierarchy. You can also override that method on your UIWindow
object if you want.