How to get UIMenuController work for a custom view?
2012-06-18 13:26
645 查看
http://stackoverflow.com/questions/1146587/how-to-get-uimenucontroller-work-for-a-custom-view
I was not able to get it working even when I read all of your answers. I'm presenting ready code that will work for everyone.
Let's say we have a controller class named Controller. You can simply paste the following code to this controller to have the menu working on its view:
What has to be done in order for menu to work is that the firstResponder(in our case our controller - see line with [self becomeFirstResponder]) has to be able to become first responder (override method canBecomeFirstResponder cause default implementation returns
NO) as well as
I was not able to get it working even when I read all of your answers. I'm presenting ready code that will work for everyone.
Let's say we have a controller class named Controller. You can simply paste the following code to this controller to have the menu working on its view:
- (void)loadView { [super loadView]; UILongPressGestureRecognizer *gr = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)]; [self.view addGestureRecognizer:gr]; [gr release]; } - (void) longPress:(UILongPressGestureRecognizer *) gestureRecognizer { if ([gestureRecognizer state] == UIGestureRecognizerStateBegan) { CGPoint location = [gestureRecognizer locationInView:[gestureRecognizer view]]; UIMenuController *menuController = [UIMenuController sharedMenuController]; UIMenuItem *resetMenuItem = [[UIMenuItem alloc] initWithTitle:@"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:CGRectMake(location.x, location.y, 0.0f, 0.0f) inView:[gestureRecognizer 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:)) { return YES; } return NO; } - (BOOL) canBecomeFirstResponder { return YES; }
What has to be done in order for menu to work is that the firstResponder(in our case our controller - see line with [self becomeFirstResponder]) has to be able to become first responder (override method canBecomeFirstResponder cause default implementation returns
NO) as well as
- (BOOL) canPerformAction:(SEL)selector withSender:(id) senderwhich should return YES to any action that can be performed by
firstResponder
相关文章推荐
- Android: How to get a custom View's height and width? [duplicate]
- How to Get iWork for Free on Older Macs
- UIView Tutorial for iOS: How To Make a Custom UIView in iOS 5: A 5 Star Rating View
- How to get Action Log of Work order
- How To Make a Custom UIView in iOS 5: A 5 Star Rating View[转]
- How to get Login Passwords for application & Data Base instances
- How To Create Custom Skins For DotText(如何为DotText创建自定义风格的皮肤)
- Advanced Pricing - How to source Pricing Attributes using QP_CUSTOM_SOURCE.Get_Custom_Attribute_Valu
- How to use jquery or ajax to update razor partial view in c#/asp.net for a MVC project
- How to get the MouseEvent coordinates for an element that has CSS3 Transform?
- Unbalanced calls to begin/end appearance transitions for <IDOOrderHomeViewController: 0x8da2960>.
- Failed to instantiate the default view controller for UIMainStoryboardFile
- 错误日志:Failed to instantiate the default view controller for UIMainStoryboardFile
- [已解决]Attempt to invoke virtual method 'int android.view.View.getImportantForAccessibility()'
- In an iOS 5 Storyboard, how do you push a new scene to the original view controller from a Popover?
- how to get the default maximum heap size for Sun's JVM from Java SE 6 or 7
- iOS--错误集锦--Failed to instantiate the default view controller for UIMainStoryboardFile 'Main'
- Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the desi
- IOS 错误:Failed to instantiate the default view controller for UIMainStoryboardFile
- How to send custom http_headers for RPC calls using python xmlrpclib?