iOS 5中“定义”编辑菜单项的选择器

时间:2011-11-05 16:03:35

标签: ios dictionary selector definition

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

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

有条件地启用/禁用系统默认值的方法。典型的编辑方法有很好的文档记录(copy:,cut:等),但我找不到任何关于在“定义”菜单选项中调用什么方法来提取iOS 5中的新单词字典。也许它是躲在明显的视线中,但我花了几个小时寻找它,所以我很感激任何帮助。具体来说,我需要:

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

但请告诉我“defineWord:”

的真正含义

ps - 我不介意知道这个方法属于哪个类,只是出于好奇(例如,copy:属于UIResponderStandardEditActions)

4 个答案:

答案 0 :(得分:5)

通过实施:

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

我能够看到选择器是“_define:”。

答案 1 :(得分:5)

定义选择器(_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];
}

答案 2 :(得分:0)

在iOS 7.1中,我看到在覆盖canPerformAction:withSender:的子类上的UIWebView方法时发生的这些操作:

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

据推测,以下划线为前缀的是“私有API”,其使用会使您的应用受到App Store的拒绝。但我无法找到任何关于这种或那种方式的文档。

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

答案 3 :(得分:0)

在不使用privateAPI的情况下轻松完成此操作,仅针对所需操作返回YES

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

享受;)