如何从 UIMenuController 中删除 Copy、Select All、Define menuItem

Posted

技术标签:

【中文标题】如何从 UIMenuController 中删除 Copy、Select All、Define menuItem【英文标题】:How to remove Copy,Select All,Define menuItem from UIMenuController 【发布时间】:2013-07-02 12:52:06 【问题描述】:

作为我的this 问题显示,我想在用户选择文本时显示弹出窗口。并在该弹出窗口中显示有关该单词的详细信息。

但我没有得到任何满意的答案,所以我改变了我的逻辑。

现在我想在我的 UIMenuController 中显示一个类似 Pop-Up 的项目,当用户单击该选项时,将显示弹出窗口。

我已经使用此代码实现了这一点,

UIMenuItem *menuItem = [[UIMenuItem alloc] initWithTitle:@"Pop-Up" action:@selector(displayPopUp:)];
    [[UIMenuController sharedMenuController] setMenuItems:[NSArray arrayWithObject:menuItem]];

所以我的选项正在显示,当我单击该选项而不是弹出显示时。但是其他一些选项也显示了我不想要的,就像这样

我已经用谷歌搜索并得到了这个代码

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender

    
[UIMenuController sharedMenuController].menuVisible = NO; //do not display the menu
if (action == @selector(copy:))


    return NO;  



else  if (action == @selector(selectAll:))

    return NO; 



[self resignFirstResponder];                      //do not allow the user to selected anything
return NO;

return [super canPerformAction:action withSender:sender];

但它并没有删除 UIMenuController 中的这个额外项。

【问题讨论】:

编辑上一个问题以增加清晰度,而不是创建一个稍微修改的新问题。 @Amar 我不同意你的看法。 bcoz 我看到他的整个问题都随着小的逻辑变化而改变,所以没关系。 【参考方案1】:

canPerformAction 方法被发送给 Responder 链中的每个人。因此,如果您上面提到的代码在 ViewController 中但 UITextView 是第一个 Responder,它将无法正常工作。我发现最简单的做法是继承 UITextView 并将 canPerformAction 代码放在那里。我禁用所有默认菜单项并创建自己的菜单。

class rtfView: UITextView 

override func canPerformAction(_ action: Selector, withSender sender: Any!) -> Bool 

    if (action == #selector(textItem(_:))) || (action == #selector(h1Item(_:))) || (action == #selector(h2Item(_:))) || (action == #selector(h3Item(_:))) 
        return true
     else 
        return false
    


【讨论】:

以上是关于如何从 UIMenuController 中删除 Copy、Select All、Define menuItem的主要内容,如果未能解决你的问题,请参考以下文章

如何从 iOS 的 UIMenuController 中删除默认的 UIMenuItem?

如何从 UITextfields UIMenuController 中删除不需要的 UIMenuItems?

如何从 UIMenuController 中删除 Copy、Select All、Define menuItem

从 TableView 中的 UIMenuController 中删除默认剪切、复制、粘贴

从 UIMenuController 中删除自定义菜单项

从 UIMenuController 中删除复制、查找和共享