UIWebView canPerformAction no deshabilita algunos elementos del menu

En un UIWebView, quiero que un determinado elemento div de class muestre solo una input de menu contextual personalizada. Entonces implementé el método canPerformAction :: en el delegado de UIWebView así:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { if (self.webView.superview != nil) { BOOL isMyClass=[[self.webView stringByEvaluatingJavaScriptFromString:@"window.getSelection().getRangeAt(0).startContainer.parentNode.className;"] isEqualToString:@"myClass"]; if (isMyClass) { if (action == @selector(myAction:)) { return YES; } else { return NO; // should disable any other menu items } } } return [super canPerformAction:action withSender:sender]; } 

El resultado es bastante extraño: cuando el usuario selecciona dicho div myclass, la mayoría de los elementos del menu no se muestran (cortar: copyr: pasado: …) pero select: y select Todo: siguen apareciendo (junto con myAction). Debugger, noto que estos dos methods select / selectAll no disparan canPerformAction :: en el delegado … ¿Dónde se activan estos dos methods?

Creo que sé por qué puede estar teniendo problemas.

Tuve la misma pregunta y la misma frustración:

"¿Por qué se selecciona: y select Todo: no aparece al pasar por las llamadas a canPerformAction ::?"

Entonces me di count de que el primer respondedor al mostrar el UIMenuController era solo un contenedor, y que esta class tenía un miembro que en realidad estaba extendiendo la class UITextView. Dado que el ShanetworkingMenuController interactúa con el primer respondedor en la cadena Responder, la implementación canPerformAction en el contenedor omitió seleccionar y seleccionar Todos porque ya habían sido manejados por el miembro textView (el primer respondedor REAL en esta situación).

Lo que debe hacer es encontrar qué object es su primer respondedor cuando visualice UIMenuController, encuentre los objects de respuesta que pueda tener hasta encontrar el mayor respondedor en la stack e implemente canPerformAction allí.

¡Buena suerte!

A veces, cuando se usa la aplicación en el dispositivo iPad, sin connection a Xcode, el menu muestra correctamente solo el artículo autorizado … A veces no … Comportamiento muy irregular