瀏覽代碼

Preserve the app's UIMenuController items

Tanner Bennett 6 年之前
父節點
當前提交
1b2181d1f7

+ 21 - 2
Classes/ExplorerInterface/FLEXExplorerViewController.m

@@ -64,6 +64,9 @@ typedef NS_ENUM(NSUInteger, FLEXExplorerMode) {
 /// All views that we're KVOing. Used to help us clean up properly.
 @property (nonatomic) NSMutableSet<UIView *> *observedViews;
 
+/// Used to preserve the target app's UIMenuController items.
+@property (nonatomic) NSArray<UIMenuItem *> *appMenuItems;
+
 @end
 
 @implementation FLEXExplorerViewController
@@ -757,6 +760,16 @@ typedef NS_ENUM(NSUInteger, FLEXExplorerMode) {
         [self statusWindow].windowLevel = self.view.window.windowLevel + 1.0;
     }
     
+    // Back up and replace the UIMenuController items
+    self.appMenuItems = UIMenuController.sharedMenuController.menuItems;
+    // Initialize custom menu items for explorer screen
+    UIMenuItem *copyObjectAddress = [[UIMenuItem alloc]
+        initWithTitle:@"Copy Address"
+        action:NSSelectorFromString(@"copyObjectAddress:")
+    ];
+    UIMenuController.sharedMenuController.menuItems = @[copyObjectAddress];
+    [UIMenuController.sharedMenuController update];
+    
     // Show the view controller.
     [self presentViewController:viewController animated:animated completion:completion];
 }
@@ -766,11 +779,17 @@ typedef NS_ENUM(NSUInteger, FLEXExplorerMode) {
     UIWindow *previousKeyWindow = self.previousKeyWindow;
     self.previousKeyWindow = nil;
     [previousKeyWindow makeKeyWindow];
-    [[previousKeyWindow rootViewController] setNeedsStatusBarAppearanceUpdate];
+    [previousKeyWindow.rootViewController setNeedsStatusBarAppearanceUpdate];
+    
+    // Restore previous UIMenuController items
+    // Back up and replace the UIMenuController items
+    UIMenuController.sharedMenuController.menuItems = self.appMenuItems;
+    [UIMenuController.sharedMenuController update];
+    self.appMenuItems = nil;
     
     // Restore the status bar window's normal window level.
     // We want it above FLEX while a modal is presented for scroll to top, but below FLEX otherwise for exploration.
-    [[self statusWindow] setWindowLevel:UIWindowLevelStatusBar];
+    [self statusWindow].windowLevel = UIWindowLevelStatusBar;
     
     [self dismissViewControllerAnimated:animated completion:completion];
 }

+ 0 - 8
Classes/ObjectExplorers/FLEXObjectExplorerViewController.m

@@ -113,14 +113,6 @@
     self.carousel.items = [self.explorer.classHierarchyClasses flex_mapped:^id(Class cls, NSUInteger idx) {
         return NSStringFromClass(cls);
     }];
-    
-    // Initialize custom menu items for explorer screen
-    UIMenuItem *copyObjectAddress = [[UIMenuItem alloc]
-        initWithTitle:@"Copy Address"
-        action:@selector(copyObjectAddress:)
-    ];
-    UIMenuController.sharedMenuController.menuItems = @[copyObjectAddress];
-    [UIMenuController.sharedMenuController update];
 
     // Swipe gestures to swipe between classes in the hierarchy
     UISwipeGestureRecognizer *leftSwipe = [[UISwipeGestureRecognizer alloc]