iOS 5中"Define"编辑菜单项的选择器



我正在构建自己的自定义编辑菜单(UIMenuController),并使用典型的

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

方法有条件地启用/禁用系统默认值。典型的编辑方法有很好的文档(copy:, cut:等),但我找不到任何关于"Define"菜单选项在iOS 5中调用什么方法来调出新词字典的信息。也许它就藏在眼前,但我花了好几个小时找它,所以我很感激你的帮助。具体来说,我需要:

if (action == @selector(defineWord:)) ......

但是告诉我"defineWord:"到底是什么

ps -我不介意知道什么类的方法属于,只是出于好奇(复制:属于UIResponderStandardEditActions,例如)

通过实现这个:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    NSLog(@"%@", NSStringFromSelector(action));
}

我可以看到选择器是"_define:"

定义选择器(_define:)实际上是私有的,如果你使用它,你的应用将被拒绝。我需要做的是让定义菜单项只显示在UITextView中:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    if (action == @selector(cut:) ||
        action == @selector(copy:) ||
        action == @selector(select:) ||
        action == @selector(selectAll:) ||
        action == @selector(paste:) ||
        action == @selector(delete:))
    {
        return NO;
    }
    else return [super canPerformAction:action withSender:sender];
}

在iOS 7.1中,我看到当在UIWebView的子类上重写canPerformAction:withSender:方法时发生这些动作:

cut:
copy:
select:
selectAll:
paste:
delete:
_promptForReplace:
_showTextStyleOptions:
_define:
_addShortcut:
_accessibilitySpeak:
_accessibilitySpeakLanguageSelection:
_accessibilityPauseSpeaking:
makeTextWritingDirectionRightToLeft:
makeTextWritingDirectionLeftToRight:

假设前缀为下划线的是"私有API",其使用将使您的应用程序被app Store拒绝。但是我真的找不到任何这样或那样的文档。

没有下划线的定义为UIResponderStandardEditActions非正式协议的一部分。

不使用privateAPI的简单方法,只对想要的操作返回YES

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    if (action == @selector(MySelector:)
    {
        return [super canPerformAction:action withSender:sender]
    }
    else 
     return NO;
}

享受;)

最新更新