Селектор для пункта меню "Определить" в iOS 5
5 Michael [2011-11-05 19:03:00]
Я создаю свое собственное меню редактирования (UIMenuController) и использую типичный
-(BOOL)canPerformAction:(SEL)action withSender(id)sender
для условного включения/отключения системных значений по умолчанию. Типичные методы редактирования хорошо документированы (копия:, cut:, и т.д.), Но я не могу найти ничего о том, какой метод вызывается с помощью опции меню "Определить", чтобы поднять новый словарь слов в iOS 5. Возможно, это прячась на виду, но я много часов искал его, поэтому я был бы признателен за любую помощь. В частности, мне нужно:
if (action == @selector(defineWord:)) ......
но дайте мне то, что действительно идет на место "defineWord:"
ps - Я бы не прочь узнать, к какому классу относится этот метод, просто из любопытства (копия: относится к UIResponderStandardEditActions, например)
dictionary definition ios selector
4 ответа
5 Richard Poirier [2011-12-15 04:07:00]
Селектор define (_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];
}
5 Jeremy [2011-11-13 05:22:00]
Используя это:
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
NSLog(@"%@", NSStringFromSelector(action));
}
Мне удалось увидеть, что селектор "_define:".
0 Basil Bourque [2014-11-15 08:42:00]
В 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
.
0 inso [2016-03-15 18:06:00]
Простой способ сделать это без использования privateAPI, вернуть YES только для желаемого действия
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
if (action == @selector(MySelector:)
{
return [super canPerformAction:action withSender:sender]
}
else
return NO;
}
Наслаждайтесь;)