2010-01-28 10 views
6

quiero cambiar las UITextInputTraits de un teclado mientras está en uso ....¿Es posible cambiar UITextInputTraits mientras se visualiza un UIKeyboard?

Mi ideales código sería algo como esto:

- (IBAction)nameTextDidChange:(UITextField *)sender { 
    if ([sender.text isEqualToString:@""]) { 
     sender.returnKeyType = UIReturnKeyDone; 
    } else { 
     sender.returnKeyType = UIReturnKeySearch; 
    } 
} 

Así que ... tienen una diferente Botón "Volver" para una cadena vacía mientras hago una cadena con algo de texto. El código que publiqué arriba no funciona, el teclado retiene sus rasgos de entrada de texto originales.

¿Alguna idea de alguien, o esto nunca va a funcionar sin importar cuánto lo intente?

¡Salud!

Nick.

Gracias a Deepak, este es el código de hecho he usado:

if ([sender.text isEqualToString:@""]) { 
    sender.returnKeyType = UIReturnKeyDone; 

    [sender resignFirstResponder]; 
    [sender becomeFirstResponder]; 
} else if (sender.returnKeyType == UIReturnKeyDone) { 

    NSString *cachedLetter = sender.text; 

    sender.returnKeyType = UIReturnKeySearch; 

    [sender resignFirstResponder]; 
    [sender becomeFirstResponder]; 

    sender.text = cachedLetter; 
} 

Respuesta

5

Usted puede hacer este trabajo añadiendo las siguientes líneas al final del método.

if ([textField.text isEqualToString:@""]) { 
    textField.returnKeyType = UIReturnKeyDone; 

    [textField resignFirstResponder]; 
    [textField becomeFirstResponder]; 
} else if (textField.returnKeyType == UIReturnKeyDone) { 
    textField.returnKeyType = UIReturnKeySearch; 

    [textField resignFirstResponder]; 
    [textField becomeFirstResponder]; 
} 

Esto debería funcionar.

Básicamente lo enciende y apaga para que la entrada de texto cambie. El segundo si es para asegurarse de voltear solo si es necesario.

+0

Genius, muchas gracias por esto. Funcionó casi a la perfección ... lo único que no funcionó fue cuando renunciaste a un teclado, pierdes el texto en el UITextField, ¡así que solo tuve que guardarlo en caché! Publicaré el código exacto que utilicé en mi pregunta para otros. –

4

[textField reloadInputViews] parece hacer el truco ...

+0

Esto funciona igual de bien que la respuesta de Deepak Danduprolu para mí – richy

0

resignFirstResponder/becomeFirstResponder & reloadInputViews tienen algunas advertencias. Ver stackoverflow.com/questions/5958427/.... Estos cambian el teclado a su estado inicial. Entonces, si el usuario se hubiera cambiado a uno de los otros diseños de teclado (números, signos de puntuación, etc.), ese estado se perderá. Nunca he encontrado una buena solución.

Cuestiones relacionadas