Created
September 2, 2016 10:47
-
-
Save macguru/22538ba68909cc006135d3ae985eec8b to your computer and use it in GitHub Desktop.
Tell if a user interaction is currently happening though a touch event in a view's window or something else – like an external keyboard or interaction in a different window (keyboard window). Example use: check if selection change was through touch or external keyboard.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// MXSEventTrackingWindow.h | |
// | |
// Created by Max Seelemann on 01.09.16. | |
// Copyright © 2016 The Soulmen. All rights reserved. | |
// | |
/*! | |
@abstract Special window class used for advanced event processing. | |
*/ | |
@interface MXSEventTrackingWindow : UIWindow | |
@end | |
/*! | |
@abstract Convenience for getting infos about the current application state. | |
*/ | |
@interface UIView (MXSEventTrackingWindow) | |
/*! | |
@abstract Returns if the current event in the view's window is a touch event. | |
@discussion Also returns NO when there is no current event in the window. | |
*/ | |
@property(nonatomic, readonly) BOOL currentEventIsTouchEvent; | |
@end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// MXSEventTrackingWindow.m | |
// | |
// Created by Max Seelemann on 01.09.16. | |
// Copyright © 2016 The Soulmen. All rights reserved. | |
// | |
#import "MXSEventTrackingWindow.h" | |
@interface MXSEventTrackingWindow () | |
@property(nonatomic, weak, readonly) UIEvent *currentEvent; | |
@end | |
@implementation MXSEventTrackingWindow | |
- (void)sendEvent:(UIEvent *)event | |
{ | |
_currentEvent = event; | |
[super sendEvent: event]; | |
_currentEvent = nil; | |
} | |
@end | |
@implementation UIView (MXSEventTrackingWindow) | |
- (BOOL)currentEventIsTouchEvent | |
{ | |
if (![self.window isKindOfClass: MXSEventTrackingWindow.class]) | |
return NO; | |
UIEvent *event = ((MXSEventTrackingWindow *)self.window).currentEvent; | |
if (!event) | |
return NO; | |
return (event.type == UIEventTypeTouches || event.type == UIEventTypePresses); | |
} | |
@end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@interface MyTextViewSubclass : UITextView | |
@end | |
@implementation MyTextViewSubclass | |
- (void)setSelectedTextRange:(UITextRange *)selectedTextRange | |
{ | |
NSLog(@"Selection changed by touch event: %d", self.currentEventIsTouchEvent); | |
[super setSelectedTextRange: selectedTextRange]; | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment