我是不是能够得到,即使我读了所有你的答案它的工作。我正在提供适用于所有人的现成代码。
比方说,我们有一个名为控制器控制器类。您可以将下面的代码简单地粘贴到该控制器具有菜单视图工作:
- (void)loadView {
[super loadView];
UILongPressGestureRecognizer *gr = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
[self.view addGestureRecognizer:gr];
}
- (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];
}
}
- (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;
}
发生了什么,以便完成对菜单的工作就是firstResponder(在我们的例子中我们的控制器 - 看线与[自becomeFirstResponder])具有能够成为第一响应(重写方法canBecomeFirstResponder原因默认实现否)以及- (BOOL) canPerformAction:(SEL)selector withSender:(id) sender
应YES返回到可以由firstResponder
评论有字符数限制 - 所以我在这里发布代码。 – 2009-07-18 07:19:10
刚发现一个解决方法: 在视图中放入一个隐形的UITextField,并使其成为第一响应者。然后复制粘贴菜单将正确弹出。 – 2009-07-18 08:28:20
我有这个相同的问题(我的自定义视图是UITableViewCell的一个子类;但否则它是相同的情况)。一个无形的UITextField不帮助我。菜单仍然没有显示,menuFrame仍然是全零。此外,只要我将UITextField设置为firstResponder,键盘就会弹出。你能为你的解决方案发布一些示例代码吗? – 2009-07-18 16:08:18