У меня есть WKWebView
и хотел бы, чтобы удалить пункты меню системы (Копировать, Определить, делись ...) из меню Edit и представить мои собственные.Отключить все меню UIMenuController редактировать в WKWebView
Я ориентируюсь на iOS 8 и 9. В настоящее время я тестирую симулятор Xcode 7.0.1 (iOS 9) и мой iPhone 6 под управлением iOS 9.0.2.
Стандартный метод не работает
Я знаю, стандартным способом достижения этого является подклассов WKWebView
и реализации -canPerformAction:withSender:
. Однако я обнаружил, что с WKWebView
-canPerformAction:withSender:
не вызывается для действий copy:
или define:
. Это, по-видимому, известная ошибка (WKWebView and UIMenuController).
Пример приложения: https://github.com/dwieringa/WKWebViewCustomEditMenuBug
@implementation MyWKWebView
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
NSLog(@"ACTION: %@", NSStringFromSelector(action));
if (action == @selector(delete:))
{
// adding Delete as test (works)
return YES;
}
// trying to remove everything else (does NOT work for Copy, Define, Share...)
return NO;
}
- (void)delete:(id)sender
{
NSLog(@"Delete menu item selected");
}
@end
Выход: (обратите внимание, не copy:
или define:
действие)
2015-10-20 12:28:32.864 WKWebViewCustomEditMenuBug[45804:21121480] ACTION: cut:
2015-10-20 12:28:32.865 WKWebViewCustomEditMenuBug[45804:21121480] ACTION: select:
2015-10-20 12:28:32.865 WKWebViewCustomEditMenuBug[45804:21121480] ACTION: selectAll:
2015-10-20 12:28:32.865 WKWebViewCustomEditMenuBug[45804:21121480] ACTION: paste:
2015-10-20 12:28:32.866 WKWebViewCustomEditMenuBug[45804:21121480] ACTION: delete:
2015-10-20 12:28:32.866 WKWebViewCustomEditMenuBug[45804:21121480] ACTION: _promptForReplace:
2015-10-20 12:28:32.866 WKWebViewCustomEditMenuBug[45804:21121480] ACTION: _transliterateChinese:
2015-10-20 12:28:32.867 WKWebViewCustomEditMenuBug[45804:21121480] ACTION: _showTextStyleOptions:
2015-10-20 12:28:32.907 WKWebViewCustomEditMenuBug[45804:21121480] ACTION: _addShortcut:
2015-10-20 12:28:32.908 WKWebViewCustomEditMenuBug[45804:21121480] ACTION: _accessibilitySpeak:
2015-10-20 12:28:32.908 WKWebViewCustomEditMenuBug[45804:21121480] ACTION: _accessibilitySpeakLanguageSelection:
2015-10-20 12:28:32.908 WKWebViewCustomEditMenuBug[45804:21121480] ACTION: _accessibilityPauseSpeaking:
2015-10-20 12:28:32.909 WKWebViewCustomEditMenuBug[45804:21121480] ACTION: makeTextWritingDirectionRightToLeft:
2015-10-20 12:28:32.909 WKWebViewCustomEditMenuBug[45804:21121480] ACTION: makeTextWritingDirectionLeftToRight:
Запланированные Обход
Мое желание теперь полностью скрыть меню редактирования и замены он с пользовательским меню, используя QBPopupMenu.
Моя проблема заключается в том, что я не смог найти способ скрыть или отключить стандартное меню «Правка». Я нашел несколько предложений, чтобы скрыть его [UIMenuController sharedMenuController].menuVisible = NO;
по адресу UIMenuControllerWillShowMenuNotification
, но я не смог заставить его работать. Он не влияет на WillShowMenu
. Я могу скрыть его в DidShowMenu
, но к этому моменту уже слишком поздно, и я получаю флеш меню.
Я также попытался найти его за пределами видимой области, используя [[UIMenuController sharedMenuController] setTargetRect:CGRectMake(0, 0, 1, 1) inView:self.extraView];
, но опять же с WillShowMenu
не влияет, и с DidShowMenu
уже слишком поздно.
Эксперименты доступны здесь: https://github.com/dwieringa/WKWebViewEditMenuHidingTest
Что мне не хватает? Есть ли другой способ отключить или скрыть стандартное меню редактирования для WKWebView?
Из любопытства вы подали сообщение об ошибке с Apple, для этого? – Ryan
@ Ryan, еще нет. Спасибо за ваш ответ ниже. Я просто попробовал, и я все еще вижу меню, когда я долго нажимаю на текст под iOS 9 на своем iPhone 6. Пробовали ли вы его с WKWebView на iOS? Я проверил с веб-инспектором, что новая настройка CSS применяется к телу. – davew
@davew какой-нибудь успех с этим? –