gpt4 book ai didi

iphone - 在显示之前添加动态自定义 UIMenuItem 以复制和粘贴菜单

转载 作者:行者123 更新时间:2023-12-03 19:12:24 57 4
gpt4 key购买 nike

我已经成功地将自定义UIMenuItem添加到我的iPhone应用程序中的复制和粘贴菜单中,甚至子类化UITextView以摆脱标准菜单项。但是,我需要做的是以某种方式捕获菜单将在实际发生之前显示的事实,并将插入点处的单词添加到菜单中。

例如,如果UITextView中的文本是“这是一个测试。”,并且该人触摸了单词"is">,它会将该单词作为 UIMenuItem 添加到 UIMenuController

菜单仅在触摸后立即显示该单词,这一点很重要。菜单的下一次调用将显示下一个触摸的单词,等等。触摸菜单中的单词将显示更多详细信息。我已经有代码可以根据 selectedRange 查找触摸的单词。我需要做的就是在菜单显示之前将该单词添加为 UIMenuItem 。另一个不太优雅的解决方案可能是允许用户触摸静态菜单项,然后根据触摸的单词添加并重新显示菜单,并提供不同的选项。

我希望有一种方法可以拦截UIMenuController,可能是通过子类化它,这样我就可以在气球显示之前到达插入点,但仍然能够对通过更改菜单项列表来实现。

有办法做到这一点吗?有人可以向我展示代码片段或向我指出一些可能对我有帮助的文档吗?谢谢。

我唯一的其他解决方案是以某种方式创建我自己的气球并以某种方式禁用“复制和粘贴”菜单。我宁愿不必尝试。

最佳答案

在某处启动时:

UIMenuItem *testMenuItem = [[UIMenuItem alloc] initWithTitle:@"Test" action:@selector(test:)];
[UIMenuController sharedMenuController].menuItems = [NSArray arrayWithObject:testMenuItem];
[testMenuItem release];

在您的 UITextViewUITextField 子类中:

@implementation MyTextView
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
if (action == @selector(test:)) {
// Return YES only if it's possible to perform the action at this time
return YES;
}
return [super canPerformAction:action withSender:sender];
}
- (void)test:(id)sender {
// Perform the action here
}
@end

关于iphone - 在显示之前添加动态自定义 UIMenuItem 以复制和粘贴菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3915643/

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