2010-07-16 3 views
1

Я разрабатываю приложение для iPhone и работаю с UIWebViews. Я планировал настроить UIMenuItems, которые появились, когда я выделяю строки в UiWebView (Копировать, Выбрать все, Вырезать и т. Д.). Я попытался удалить эти элементы меню, но я не могу удалить пункт меню COPY.Как удалить COPY UIMenuItem в UIMenuController

Мне нужна ваша помощь.

Спасибо, ZaldzBugz

+0

Я считаю, что это можно сделать в canPerformAction. Но я действительно не знаю, как удалить пункт меню COPY. – Zaldy

+1

привет, может указать, как удалить другие пункты меню в UIMenuController? Я хочу удалить стрелку. –

+0

@ Risma. Вам удалась удалить элемент стрелки и поместить все доступные меню в основной кадр? –

ответ

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]; 

Если не на том, что один, то это, вероятно, на том, что находится на вершине самой, что и я подозреваю. Это недокументированный тип View, но если вы рассматриваете его как 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 

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

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

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

Это все догадка. Надеюсь, поможет.

1

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

Смежные вопросы