UIWebView con contentEditable (edición html), manejo de primera respuesta?

Estoy creando un componente de editor html para una aplicación (usando UIWebView con contentEditable en iOS 5.0), y me atasqué en cómo manejar el estado de UIWebView first respond

[webView isFirstResponder], [webView becomeFirstResponder] y [webView resignFirstResponder] no parecen funcionar, y no tengo idea de cómo hacer que la webView se convierta o renuncie por código

Si alguien sabe cómo resolver esto, estaría muy agradecido, ¡gracias de antemano!

Aquí es cómo sobrescribo estos métodos en una subclase UIWebView (el content es la identificación del elemento editable):

 -(BOOL)resignFirstResponder { [self setUserInteractionEnabled:NO];[self setUserInteractionEnabled:YES]; return [super resignFirstResponder]; } // only works on iOS 6+ -(void)becomeFirstResponder { self.keyboardDisplayRequiresUserAction = NO; // set here or during initialization [self stringByEvaluatingJavaScriptFromString:@"document.getElementById('content').focus()"]; } -(BOOL)isFirstResponder{ if ([[self stringByEvaluatingJavaScriptFromString:@"document.activeElement.id=='content'"] isEqualToString:@"true"]) { return YES; } else { return NO; } } 

isFirstResponder solo devolverá true después de que se muestre el teclado (por ejemplo, devolverá false en UIKeyboardWillShowNotification)

En caso de que esto sea un problema, otra manera de verificar si UIWebView es el primer respondedor es el siguiente:

 +(BOOL)isFirstResponder:(UIView *)v{ for (UIView *vs in v.subviews) { if ([vs isFirstResponder] || [self isFirstResponder:vs]) { return YES; } } return NO; } -(BOOL)isFirstResponder{ return [[self class] isFirstResponder:self]; } 

De esta forma, el valor devuelto será YES incluso antes / después de que finalice la animación del teclado (mostrar u ocultar).

Me encontré con el mismo problema recientemente, pero lo resolví usando JavaScript puro. En realidad, no necesita ningún método relacionado con el Primer Respondedor Objective-C. Acabo de utilizar el JavaScript para cambiar el contenido de UIWebView: el valor del atributo del elemento HTML del elemento de orientación según el requisito.

Por ejemplo, usando el siguiente código para ocultar el teclado que llamó el contenido editable de UIWebView:

 [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('target').setAttribute('contentEditable','false')"]; 

Espero que esto sea útil. 🙂

Aquí es cómo sobrescribo estos métodos en una subclase UIWebView (el contenido es la identificación del elemento editable):

 [_webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('content').focus()"]; 

Pero el foco va al 1er punto, no al último punto

Llame a las siguientes líneas de código cuando desee ocultar el teclado.

 //wView is your UIWebView NSString *webText = [wView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"]; [wView loadHTMLString:webText baseURL:nil]; 

[webView loadHTMLString: [NSString stringWithFormat: @ “% @”, htmlString] baseURL: nil]; Esto funciona en iOS> 4