我正在尝试创建一个自定义的UIMenuController并将其显示在我的视图中。下面是我的代码:
UIMenuController *menuController = [UIMenuController sharedMenuController];
UIMenuItem *listMenuItem = [[UIMenuItem alloc] initWithTitle:@"List" action:@selector(addList:)];
[menuController setMenuItems:[NSArray arrayWithObject:listMenuItem]];
[menuController setTargetRect:CGRectMake(50.0, 50.0, 0, 0) inView:self.view];
[menuController setMenuVisible:YES animated:YES];
[listMenuItem release];没有错误或异常,但菜单控制器就是不显示。
发布于 2010-09-09 12:32:30
你需要做三件事:
controller.
YES).
-becomeFirstResponder来实现-canBecomeFirstResponder (返回你的视图或视图控制器可以实现-canPerformAction:action withSender:sender来单独显示/隐藏菜单项。发布于 2014-05-24 06:37:20
答案提到了三件事,但为了挑剔,有六件事:
userInteractionEnabled = YES-window属性必须与inView:中视图的窗口相同argument.-canBecomeFirstResponder并返回[handler becomeFirstResponder]需要调用[menu setTargetRect:inView:],否则后者将失败。[menu setTargetRect:inView] (至少调用一次)和[handler becomeFirstResponder]特别是上面的1-3点让我很感兴趣。起初我想要一个自定义菜单处理程序类,它是一个UIResponder,这会导致-becomeFirstResponder返回NO;然后它是一个UIView,失败了,然后我尝试使它成为一个可以工作的UIButton,但这仅仅是因为对于按钮,userInteractionEnabled默认为YES,对于UIViews,它默认为NO。
发布于 2010-12-27 16:51:44
仅当视图是first responder时,UIMenuController才在任何视图上可见
- (BOOL)canPerformAction方法返回YES
因此,如果您的菜单控制器要在单击按钮时显示,则按钮操作中的第一行应该是[self becomeFirstResponder]。注意:这里self是显示菜单的视图。
如果要在长按手势上显示菜单,则在写入之前将longPressGesture添加到UIView和长按事件中
[menuController setTargetRect:CGRectMake(50.0, 50.0, 0, 0) inView:self.view];
[menuController setMenuVisible:YES animated:YES];写入[self becomeFirstResponder];
然后按照OZ提到的步骤操作。
https://stackoverflow.com/questions/3112925
复制相似问题