Deshabilite todo el menú de edición de UIMenuController en WKWebView
tengo unWKWebView
y me gustaría eliminar los elementos del menú del sistema (Copiar, Definir, Compartir ...) del Menú Editar y presentar el mío.
Estoy apuntando a iOS 8 y 9. Actualmente estoy probando con el simulador Xcode 7.0.1 (iOS 9) y mi iPhone 6 con iOS 9.0.2.
El método estándar no funcionaSé que la forma estándar de lograr esto es subclasificarWKWebView
e implementando-canPerformAction:withSender:
. Sin embargo, he encontrado que conWKWebView
-canPerformAction:withSender:
no se llama para elcopy:
odefine:
comportamiento. Esto parece ser un error conocido (WKWebView y UIMenuController)
Aplicación de ejemplo: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
Salida: (nota nocopy:
odefine:
acción)
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:
Solución planificadaMi deseo ahora es ocultar completamente el menú de edición y reemplazarlo con un menú personalizado usandoQBPopupMenu.
Mi problema es que no he podido encontrar una manera de ocultar o deshabilitar el menú Editar estándar. He encontrado algunas sugerencias para ocultarlo[UIMenuController sharedMenuController].menuVisible = NO;
enUIMenuControllerWillShowMenuNotification
, pero no he podido hacer que esto funcione. No tiene ningún efecto conWillShowMenu
. Puedo esconderlo enDidShowMenu
pero para ese momento ya es demasiado tarde y aparece un menú flash.
También he tratado de localizarlo fuera del área visible usando[[UIMenuController sharedMenuController] setTargetRect:CGRectMake(0, 0, 1, 1) inView:self.extraView];
, pero de nuevo haciéndolo conWillShowMenu
no tiene efecto y conDidShowMenu
es muy tarde.
Experimentos disponibles aquí:https://github.com/dwieringa/WKWebViewEditMenuHidingTest
¿Qué me estoy perdiendo? ¿Hay alguna otra forma de desactivar u ocultar el menú de edición estándar para WKWebView?