summaryrefslogtreecommitdiff
path: root/platform/ios/src
diff options
context:
space:
mode:
authorJustin R. Miller <incanus@codesorcery.net>2017-05-02 14:07:57 -0700
committerJordan Kiley <jmkiley@users.noreply.github.com>2017-05-02 14:07:57 -0700
commite5ae80ca9648032298eddfc7032c11bc02a3c534 (patch)
treef2ff2ec806681aa77f388dd2e58a7de5545906d7 /platform/ios/src
parent5c52401d5504ab4b84d1510042c6b97504c50933 (diff)
downloadqtlocation-mapboxgl-e5ae80ca9648032298eddfc7032c11bc02a3c534.tar.gz
[ios] properly show attribution in modal hierarchies (#8837)
fixes #8782
Diffstat (limited to 'platform/ios/src')
-rw-r--r--platform/ios/src/MGLMapView.mm12
-rw-r--r--platform/ios/src/UIViewController+MGLAdditions.h11
-rw-r--r--platform/ios/src/UIViewController+MGLAdditions.m22
3 files changed, 38 insertions, 7 deletions
diff --git a/platform/ios/src/MGLMapView.mm b/platform/ios/src/MGLMapView.mm
index 42079baf94..d6f4c1e7fa 100644
--- a/platform/ios/src/MGLMapView.mm
+++ b/platform/ios/src/MGLMapView.mm
@@ -42,12 +42,13 @@
#import "NSBundle+MGLAdditions.h"
#import "NSDate+MGLAdditions.h"
-#import "NSString+MGLAdditions.h"
-#import "NSProcessInfo+MGLAdditions.h"
#import "NSException+MGLAdditions.h"
+#import "NSPredicate+MGLAdditions.h"
+#import "NSProcessInfo+MGLAdditions.h"
+#import "NSString+MGLAdditions.h"
#import "NSURL+MGLAdditions.h"
#import "UIImage+MGLAdditions.h"
-#import "NSPredicate+MGLAdditions.h"
+#import "UIViewController+MGLAdditions.h"
#import "MGLFaux3DUserLocationAnnotationView.h"
#import "MGLUserLocationAnnotationView.h"
@@ -1946,10 +1947,7 @@ public:
attributionController.popoverPresentationController.sourceView = self;
attributionController.popoverPresentationController.sourceRect = self.attributionButton.frame;
- UIViewController *viewController = self.window.rootViewController;
- if ([viewController isKindOfClass:[UINavigationController class]]) {
- viewController = [(UINavigationController *)viewController viewControllers].firstObject;
- }
+ UIViewController *viewController = [self.window.rootViewController mgl_topMostViewController];
[viewController presentViewController:attributionController
animated:YES
completion:NULL];
diff --git a/platform/ios/src/UIViewController+MGLAdditions.h b/platform/ios/src/UIViewController+MGLAdditions.h
new file mode 100644
index 0000000000..b60375a6f6
--- /dev/null
+++ b/platform/ios/src/UIViewController+MGLAdditions.h
@@ -0,0 +1,11 @@
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface UIViewController (MGLAdditions)
+
+@property (readonly) UIViewController *mgl_topMostViewController;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/platform/ios/src/UIViewController+MGLAdditions.m b/platform/ios/src/UIViewController+MGLAdditions.m
new file mode 100644
index 0000000000..746fdd8db8
--- /dev/null
+++ b/platform/ios/src/UIViewController+MGLAdditions.m
@@ -0,0 +1,22 @@
+#import "UIViewController+MGLAdditions.h"
+
+@implementation UIViewController (MGLAdditions)
+
+- (UIViewController *)mgl_topMostViewController
+{
+ if ([self isKindOfClass:[UINavigationController class]])
+ {
+ return [[(UINavigationController *)self visibleViewController] mgl_topMostViewController];
+ }
+ else if ([self isKindOfClass:[UITabBarController class]])
+ {
+ return [[(UITabBarController *)self selectedViewController] mgl_topMostViewController];
+ }
+ else if (self.presentedViewController)
+ {
+ return [self.presentedViewController mgl_topMostViewController];
+ }
+ return self;
+}
+
+@end