diff --git a/src/plugins/platforms/ios/qiosglobal.mm b/src/plugins/platforms/ios/qiosglobal.mm index bc16a7997d3ea6548c9839ca4cca2e5892e28caa..71d5a5808859deaf02e3a6807c4cd20f5c1611d7 100644 --- a/src/plugins/platforms/ios/qiosglobal.mm +++ b/src/plugins/platforms/ios/qiosglobal.mm @@ -152,6 +152,22 @@ int infoPlistValue(NSString* key, int defaultValue) @implementation QtFirstResponderEvent @end + +@implementation UIView (QtFirstResponder) +- (UIView*)qt_findFirstResponder +{ + if ([self isFirstResponder]) + return self; + + for (UIView *subview in self.subviews) { + if (UIView *firstResponder = [subview qt_findFirstResponder]) + return firstResponder; + } + + return nil; +} +@end + @implementation UIResponder (QtFirstResponder) +(id)currentFirstResponder @@ -164,7 +180,11 @@ int infoPlistValue(NSString* key, int defaultValue) - (void)qt_findFirstResponder:(id)sender event:(QtFirstResponderEvent *)event { Q_UNUSED(sender); - event.firstResponder = self; + + if ([self isKindOfClass:[UIView class]]) + event.firstResponder = [static_cast<UIView *>(self) qt_findFirstResponder]; + else + event.firstResponder = [self isFirstResponder] ? self : nil; } @end