Как удалить КОПИРОВАТЬ UIMenuItem в UIMenuController
Я занимаюсь разработкой приложения для iPhone и работал с UIWebViews. Я планировал настроить UIMenuItems, которые появляются, когда я выделяю строки в UiWebView (Копировать, Выбрать все, Вырезать и т. Д.). Я попытался удалить эти элементы меню, но я не могу удалить пункт меню COPY.
Мне нужна ваша помощь, ребята.
Спасибо, ZaldzBugz
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
Я ничего не могу обещать, но это должно записывать имя КАЖДОГО метода, который вызывается по вашему мнению.
Запустите ваше приложение и выполните копирование, вставьте, выберите, выберите все методы. Ваш журнал должен показать, какие методы вызываются при нажатии кнопок. При нажатии кнопки может отображаться несколько методов, возможно, вам просто нужен первый.
Теперь, когда вы создаете пункт меню, вы знаете, какой селектор ему назначить.
Это всего лишь предположение. Надеюсь, поможет.
Я использовал технику в этом ответе на похожий вопрос, и он работает для избавления от пункта меню Копировать. Таким образом, переопределите UIWebView вместо UITextView в их примере. Также написал canPerformAction:withSender: в контроллере представления, который возвращает YES для моих пользовательских селекторов и NO для copy: selector, затем возвращает значение супер реализации, если селектор не является ни одним из них. Не забудьте установить имя пользовательского подкласса UIWebView в xib.