Как удалить копию UIMenuItem в UIMenuController

Я разрабатываю приложение для iPhone и работаю с UIWebViews. Я планировал настроить UIMenuItems, которые появляются, когда я выделяю строки в UiWebView (копировать, выделять все, вырезать и т. Д.). Я попытался удалить эти элементы меню, но не могу удалить элемент меню КОПИРОВАТЬ.

Ребята, мне нужна ваша помощь.

Спасибо, ZaldzBugz


person Zaldy    schedule 16.07.2010    source источник
comment
Я считаю, что это можно сделать в canPerformAction. Но я действительно не знаю, как удалить пункт меню КОПИРОВАТЬ.   -  person Zaldy    schedule 16.07.2010
comment
привет, можете ли вы сказать мне, как удалить другие пункты меню в UIMenuController? я хочу удалить стрелку   -  person R. Dewi    schedule 18.05.2011
comment
@Risma - Вам повезло с попыткой удалить стрелку и разместить все доступные меню в самом главном фрейме?   -  person Raj Pawan Gumdal    schedule 25.04.2012


Ответы (2)


Тебе придется угнать какой-нибудь самолет. Я даже не знаю, возможно ли это. Похоже, он, вероятно, реагирует на событие жеста под названием UILongPressGestureRecognizer.

Вам нужно узнать, к какому виду добавлен жест. что-то вроде этого.

NSArray *gestures = myWebView.gestureRecognizers;
for(int i=0;i<[gestures count];i++){
    UIGestureRecognizer g = [gestures objectAtIndex:i];
    if([g isKindOfClass:UILongPressGestureRecognizer.Class]){
       [myWebView removeGestureRecognizer:g];
       break;
    }
}

но я не думаю, что этот жест находится непосредственно в UIWebview. Он находится в одном из его подвидов.

Так что это может быть в этом подвиде

UIScrollView *sview = [[mywebview subviews] objectAtIndex:0];

Если не на этом, то, вероятно, он находится на вершине обзора, что я подозреваю. Это недокументированный тип представления, но если рассматривать его как UIView для методов, которые мы вызываем, он предположительно безопасен. Кроме того, поскольку вы рассматриваете его как UIView, насколько я понимаю, это не противоречит правилам.

UIScrollView *sview = [[mywebview subviews] objectAtIndex:0];
UIView *realWebView = [[sview subviews] objectAtIndex:10];

Причина, по которой я не написал фрагмент (который не был протестирован), чтобы попытаться удалить жест из всех представлений, заключается в том, что важно знать, из какого представления вы его удаляете.

После его удаления вам нужно написать свой собственный UILongPressGestureRecognizer, а затем добавить новый в соответствующее представление (представление, из которого он был удален).

Вы потеряли все свои функции выбора копирования и т. Д., Но теперь вы можете реализовать свои собственные.

Если вам нужны некоторые из старых функций, я думаю, что знаю, как их вернуть, но я не могу обещать, что это разрешено или безопасно.

Перед тем, как удалить жест, вам нужно переопределить метод для UIView. Вы должны иметь возможность сделать это в своем текущем файле рабочего класса (вверху файла)

@implementation UIView (extended)
     -(BOOL) respondsToSelector:(SEL)aSelector {
          printf("SELECTOR: %s\n", 
            [NSStringFromSelector(aSelector) UTF8String]);

          return [super respondsToSelector:aSelector];
     }
@end

Я не могу ничего обещать, но это должно регистрировать имя КАЖДОГО метода, который вызывается в вашем представлении.

Запустите приложение и выполните копирование, вставку, выделение, выделение всех методов. Ваш журнал должен показывать, какие методы вызываются при нажатии кнопок. Когда вы нажимаете кнопку, он может отображать несколько методов, возможно, вам просто нужен первый.

Теперь, когда вы создаете menuItem, вы знаете, какой селектор ему назначить.

Это всего лишь предположение. Надеюсь, это поможет.

person maxpower    schedule 20.07.2010

Я использовал технику из этого ответа на аналогичный вопрос, и он работает для избавления от Копировать пункт меню. То есть переопределить UIWebView вместо UITextView в их примере. Также написал canPerformAction: withSender: в контроллере представления, который возвращает YES для моих настраиваемых селекторов и NO для селектора copy:, а затем возвращает значение суперреализации, если селектор не является ни одним из них. Не забудьте установить собственное имя подкласса UIWebView в вашем xib.

person cocteau    schedule 14.12.2010