Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 将动态自定义UIMenuItem添加到复制(&;显示前粘贴菜单_Iphone_Uimenucontroller - Fatal编程技术网

Iphone 将动态自定义UIMenuItem添加到复制(&;显示前粘贴菜单

Iphone 将动态自定义UIMenuItem添加到复制(&;显示前粘贴菜单,iphone,uimenucontroller,Iphone,Uimenucontroller,我已经成功地将自定义的UIMenuItem添加到我的iPhone应用程序的复制和粘贴菜单中,甚至子类化了UITextView以摆脱标准菜单项。然而,我需要做的是以某种方式捕捉菜单将在实际发生之前显示的事实,并在插入点将单词添加到菜单中 例如,如果UITextView中的文本是“这是一个测试”,并且触摸单词“is”的人将该单词作为UIMenuItem添加到UIMenuController 重要的是,菜单仅在触摸单词后直接显示该单词。下一次调用菜单将显示下一个单词tocked,等等。触摸菜单中的单词

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

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

重要的是,菜单仅在触摸单词后直接显示该单词。下一次调用菜单将显示下一个单词tocked,等等。触摸菜单中的单词将显示更多细节。我已经有了基于selectedRange查找单词的代码。我需要做的就是在菜单显示之前将该单词添加为UIMenuItem。另一个不那么优雅的解决方案可能是允许用户触摸一个静态菜单项,然后根据“触摸”一词使用不同的选项添加和重新显示菜单

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

有办法做到这一点吗?有人能给我看一段代码片段或者给我指一些可能对我有帮助的文档吗?谢谢

我唯一的另一个解决方案是以某种方式创建自己的引出序号,并以某种方式禁用“复制和粘贴”菜单。我宁愿不去尝试。

在某个地方启动时:

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

@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

如果问题仍然相关,则可以使用
uimenucontrollerwillshowmenonification
uimenucontrollerdidshowmenonification
通知。

代码示例:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willShowMenu:) name:UIMenuControllerWillShowMenuNotification object:nil];

rpetrich-这是添加自定义UIMenuItem的标准方法。我已经准备好了密码。但是,我无法在运行时根据触摸的选定范围截取触摸以更改菜单项。请在您的
UITextViewDelegate
中实现
textViewDidChangeSelection:
;内部更新
UIMenuItem
title
属性,以表示按钮应给出选择的标题。或者,可以在
canPerformAction:withSender:
中更新菜单项的标题,但我不指望这样做。