gpt4 book ai didi

iphone - 如何从 UIMenuController 中删除复制、全选、定义菜单项

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:21:17 26 4
gpt4 key购买 nike

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

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

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

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

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

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

enter image description here

我用谷歌搜索并得到了这段代码

- (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 中的这个额外项目。

最佳答案

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
}

}

关于iphone - 如何从 UIMenuController 中删除复制、全选、定义菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17426142/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com