2011-11-03 10 views
5

Antes que nada, sé que contentándome solo es iOS 5 Lo he explicado: estamos otorgando a los usuarios con iOS 5 una función para permitir el pegado de texto enriquecido utilizando contentivo. Esta característica funciona muy bien hasta ahora todo lo que quiero hacer es cuando la vista parece establecer el campo contenteditable como activo (preseleccionarlo) para que aparezca el teclado y el usuario puede comenzar a escribir de inmediato. Aquí está el archivo HTML local que estoy utilizando para la UIWebViewCómo preseleccionar el campo contenteditable en UIWebView iOS5

<html> 
    <body> 
     <div id="content" contenteditable="true" style="font-family: Helvetica">PLACEHOLDER</div> 
    </body> 
</html> 

ya he intentado usar algo de JavaScript para lograr esto utilizando tutoriales que he encontrado para preseleccionar una entrada de texto. No pude hacer que esto funcionara, incluso cuando traté de cambiar a un campo de entrada de texto para probarlo. Esto es probablemente debido a mi inexperiencia con javascipt, así que si esa es la solución, explícate (ya que no estoy completamente familiarizado con javascript).

Gracias por cualquier ayuda

Respuesta

4

Lamentablemente no se puede hacer eso en Mobile Safari. Creo que Apple optó por restringir esto porque cuando visitas algunos sitios, como Google, por ejemplo, el campo de búsqueda se enfoca inmediatamente. Esto sería extremadamente molesto para los usuarios si cada sitio al que iban, el teclado apareciera. En el escritorio, este comportamiento no importa, pero en los dispositivos móviles es muy notable.

relacionadas: Mobile Safari Autofocus text field

+0

Gracias, eso es lo que sospechaba, pero quería asegurarme. – xizor

0

que no tienen información sobre contenteditable en iOS, pero creo que usted debería ser capaz de simplemente crear una gama y añadirlo a la selección.

var input; // your contenteditable element 
var range = document.createRange(); 
range.selectNodeContents(input); 

var sel = window.getSelection(); 
sel.removeAllRanges(); 
sel.addRange(range); 
+1

esto funciona en los navegadores de escritorio modernos. pero no en el safari móvil a partir de iOS 5. –

+0

es bueno saber :) –

2

puedes Invocar el teclado si se encuentra en el contexto de un controlador de eventos click.

Por ejemplo

document.body.addEventListener('click', function() { 
    content.focus(); 
}, false); 

debería funcionar

+0

Esto funciona! El comportamiento real es un poco más permisivo que esto (hay otras ocasiones/eventos que te permiten enfocar un contenido editable), pero es tan extraño e impredecible que no merece la pena documentarlo. – aaaidan

7

Ahora bien, si alguien quiere lograr esto en iOS 6, se puede abrir el teclado de iOS mediante programación como esta,

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 

    // keyboardDisplayRequiresUserAction available in iOS >= 6 
    if ([webView respondsToSelector:@selector(setKeyboardDisplayRequiresUserAction:)]) { 
     webView.keyboardDisplayRequiresUserAction = NO; 
    } 
} 

y luego,

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    // Assuming that you're using jquery. If not, use document.getElementById('YourInputElementID') 
    NSString *evalStr = [NSString stringWithFormat:@"setTimeout(function(){$('#YourInputElementID').focus();},1000);"]; 
    [webView stringByEvaluatingJavaScriptFromString:evalStr]; 
} 

Esto ejecutará este javascript después de 1 segundo. Por seguridad, debe llamar al código get focus cuando el elemento de enfoque se haya cargado.

+0

Funciona muy bien, ty. –

+0

Configurar 'keyboardDisplayRequiresUserAction' en InterfaceBuilder no funcionó para mí, pero agregarlo en el código lo solucionó. Si el código anterior no funciona para alguien que está leyendo, asegúrese de que la propiedad esté realmente configurada en tiempo de ejecución. – tharkay

Cuestiones relacionadas