Deshabilite todo el menú de edición de UIMenuController en WKWebView

Requisito

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 funciona

Sé 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 planificada

Mi 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?

Respuestas a la pregunta(10)

Su respuesta a la pregunta