我正在构建自己的自定义编辑菜单(UIMenuController)并使用典型的
-(BOOL)canPerformAction:(SEL)action withSender(id)sender
有条件地启用/禁用系统默认值的方法。典型的编辑方法有很好的文档记录(copy:,cut:等),但我找不到任何关于在“定义”菜单选项中调用什么方法来提取iOS 5中的新单词字典。也许它是躲在明显的视线中,但我花了几个小时寻找它,所以我很感激任何帮助。具体来说,我需要:
if (action == @selector(defineWord:)) ......
但请告诉我“defineWord:”
的真正含义ps - 我不介意知道这个方法属于哪个类,只是出于好奇(例如,copy:属于UIResponderStandardEditActions)
答案 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;
}
享受;)