How to show UIMenuController in UIBarButtonItem

How to show UIMenuController in UIMenuController section when clicking on it?

+4
source share
1 answer

Suppose your UIBarButtonItem is connected to:

 -(void)buttonClicked:(UIBarButtonItem*)sender event:(UIEvent*)event; 

Then paste these codes into the controller of the form:

 -(void)buttonClicked:(UIBarButtonItem*)sender event:(UIEvent*)event{ [self becomeFirstResponder]; /*get the view from the UIBarButtonItem*/ UIView *buttonView=[[event.allTouches anyObject] view]; CGRect buttonFrame=[buttonView convertRect:buttonView.frame toView:self.view]; UIMenuController *menuController = [UIMenuController sharedMenuController]; UIMenuItem *resetMenuItem = [[UIMenuItem alloc] initWithTitle:@"Menu Item" action:@selector(menuItemClicked:)]; NSAssert([self becomeFirstResponder], @"Sorry, UIMenuController will not work with %@ since it cannot become first responder", self); [menuController setMenuItems:[NSArray arrayWithObject:resetMenuItem]]; [menuController setTargetRect:buttonFrame inView:self.view]; [menuController setMenuVisible:YES animated:YES]; [resetMenuItem release]; } - (void) copy:(id) sender { // called when copy clicked in menu } - (void) menuItemClicked:(id) sender { // called when Item clicked in menu } - (BOOL) canPerformAction:(SEL)selector withSender:(id) sender { if (selector == @selector(menuItemClicked:) /*|| selector == @selector(copy:)*/ /*<--enable that if you want the copy item */) { return YES; } return NO; } - (BOOL) canBecomeFirstResponder { return YES; } 

The key should return YES for canBecomeFirstResponder and canPerformAction.

Here is an example project if you need it.

These codes actually come from other posts on stackoverflow, I just combined them.

Draw UIBarButtonItem frame in window?

How to make UIMenuController work for custom view?

+12
source

Source: https://habr.com/ru/post/1344919/


All Articles