Селектор для «Определить» пункт меню Edit в iOS 5 - PullRequest
5 голосов
/ 05 ноября 2011

Я создаю свое собственное меню редактирования (UIMenuController) и использую типичный

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

метод для условного включения / отключения системных значений по умолчанию. Типичные методы редактирования хорошо документированы (copy :, cut: и т. Д.), Но я не могу найти ничего о том, какой метод вызывается опцией меню «Определить», чтобы открыть новый словарь слов в iOS 5. Может быть, это прячется на виду, но я часами искал его, поэтому буду признателен за любую помощь. Конкретно мне нужно:

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

но дайте мне, что на самом деле происходит вместо "defineWord:"

ps - я не возражаю, зная, к какому классу принадлежит метод, просто из любопытства (например, copy: принадлежит UIResponderStandardEditActions)

Ответы [ 4 ]

5 голосов
/ 15 декабря 2011

Селектор 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 голосов
/ 13 ноября 2011

Реализуя это:

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

Мне удалось увидеть, что селектор "_define:".

0 голосов
/ 15 марта 2016

Простой способ сделать это без использования privateAPI, вернуть YES только для требуемого действия

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

Наслаждайтесь;)

0 голосов
/ 15 ноября 2014

В 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 неофициального протокола.

...