2011-05-04 21 views
7

Implementé una vista de teclado personalizada en una aplicación de iOS. Tengo varios UITextFields que usan este teclado. Algunos de estos UITextFields tienen delegados que anulan shouldChangeCharactersInRange. Sin embargo, si mi teclado simplemente establece el valor del texto en el campo de texto, no se envía el mensaje shouldChangeCharactersInRange. Lo que creo que necesito es hacer algo como SendKey y enviar el código de tecla al UITextField.iOS: ¿Cómo enviar la clave a UITextField?

¿Alguna sugerencia?

Respuesta

-1

Parece que el teclado es responsable de enviar el mensaje shouldChangeCharactersInRange al UITextField, en lugar de simplemente establecer su valor. Tiene su teclado calcular los valores de range y string, y llamar:

if ([[theTextField delegate] textField:theTextField shouldChangeCharactersInRange:range replacementString:string]) 
    theTextField.text = [theTextField.text stringByReplacingCharactersInRange:range withString:string]; 
+0

parece que no puedo obtener el rango. No veo cómo obtener la posición del cursor o el rango de caracteres seleccionados, si hay alguno. – Darrell

+0

Intente utilizar todo el rango del texto en el campo, de la siguiente manera: 'Rango NSRange = NSMakeRange (0, theTextField.text.length);' – BHSPitMonkey

+0

Parece un trabajo incómodo para cambiar el texto completo cuando una sola tecla está presionado, pero puede funcionar. Ahora mi problema es que no sé dónde está la posición del cursor para insertar el personaje. Si supiera la posición del cursor, también podría enviar el rango correcto. – Darrell

5

As I note in my answer here, la UITextField cumpla con el protocolo UITextInput. Así que llama a sus métodos:

[textField replaceRange:textField.selectedTextRange withText:text]; 

De interés: "" realizará un retroceso y, por supuesto, " " hará un espacio.

Esto debería llamar al método shouldChangeCharactersInRange automáticamente. Si no, tendrías que hacer eso tú mismo.

Definitivamente debe hacer esto si va a crear un teclado personalizado en iOS.

+1

Estaba buscando una manera de eliminar caracteres individuales de un UITextField presionando un UIButton personalizado, incluso si el cursor * no * está al final del campo de texto. Esta respuesta hace exactamente eso (felicitaciones por la parte "De interés ..."), ¡gracias un millón (+1)! – pille

+1

'[textField replaceRange: textField.selectedTextRange withText: text]' no llama a 'shouldChangeCharactersInRange'. – memmons

Cuestiones relacionadas