【问题标题】:How to remove default menu items from UIMenuController?如何从 UIMenuController 中删除默认菜单项?
【发布时间】:2013-04-14 20:32:03
【问题描述】:

我在UITableViewCell 中创建了一个菜单,这个UIMenuController 只有两个项目。但是当我运行它时,这个菜单显示了很多项目,似乎是ios默认菜单项,如截图所示:

如何删除这些项目并只显示我定义的项目?谢谢。

这是我的代码:

- (id)initWithComment:(DSComment *)comment { self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"comment"]; UILabel *contentLabel=[[UILabel alloc] initWithFrame:CGRectMake(10, 45, 300, 0)]; contentLabel.text=comment.message; [self.contentView addSubview:contentLabel]; 回归自我; } - (BOOL) canBecomeFirstResponder { 返回是; } -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [自己成为FirstResponder]; UIMenuController *menu = [UIMenuController sharedMenuController]; UIMenuItem *like = [[UIMenuItem alloc] initWithTitle:@"Like" action:@selector(like:)]; UIMenuItem *reply = [[UIMenuItem alloc] initWithTitle:@"Replay" action:@selector(reply:)]; [菜单 setMenuItems:[NSArray arrayWithObjects:like, reply, nil]]; [菜单 setTargetRect:CGRectMake(0, 0, 0.0f, 0.0f) inView:self]; [菜单 setMenuVisible:YES 动画:YES]; }

【问题讨论】:

标签: ios uimenucontroller


【解决方案1】:

您需要覆盖 canPerformAction:withSender: 并返回 NO 以获得您不想要的操作。

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
    if (action == @selector(_myCustomActionSelector:)) return YES;
    return NO;
}

【讨论】:

  • 这对我不起作用 - 我想隐藏的操作甚至没有传递给这个方法(您可以通过 NSLog(@"%@", NSStringFromSelector(action)); 在返回之前对其进行测试. - iOS 7 和 8
  • 如果你没有被问到一个特定的选择器,它可能意味着在你前面的响应者链中正在接受它。在当前第一响应者上调用-canPerformAction:withSender:,如果它返回NO,则询问下一个响应者。如果任何响应者返回YES,则不会咨询下一个响应者。
  • 谢谢,axiixc,我需要对我的 UI 元素进行子类化,并将此方法写入该子类的 .m 文件中。它有效。
  • 我为 WKWebView 尝试了这个解决方案,以便我可以删除复制、查找和共享等系统标注。此解决方案不起作用,这些事件从未发生
  • 使用 WKWebView,我不确定有没有好的方法来做到这一点。 WKWebView 本身不是第一响应者,有一个更深层次的对象扮演这个角色,并会在更高响应者有机会之前做出响应。
猜你喜欢
  • 2014-08-23
  • 2018-01-20
  • 1970-01-01
  • 1970-01-01
  • 2013-02-05
  • 2010-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多