2010-04-04 11 views
5

Tengo un teclado personalizado que quiero mostrar cuando el usuario toca un UITextField. Pero al mismo tiempo quiero mostrar el cursor en el campo de texto. Si devuelve un NO para canBecomeFirstResponder, no muestra el teclado predeterminado, pero tampoco muestra el cursor.iPhone: ¿es posible que no se muestre el teclado, pero que siga mostrando el cursor en un UITextField?

¿Alguien puede ayudarme?

Gracias.

+0

¿Cómo es un cursor en una UITextField útil si no existe un teclado?No demasiado, que probablemente sea el motivo por el que no es una función compatible. – psychotik

+0

Tiene un teclado personalizado. Es por eso que no quiero que aparezca el teclado predeterminado, pero aún quiero el cursor para que el usuario sepa dónde está ingresando el texto – Swastik

+2

Definitivamente hay un uso para esto. Sherry, encontraste una respuesta? –

Respuesta

0

No estoy seguro del punto, pero ¿por qué no simplemente usar un UILabel con el mismo contenido del campo de texto y decorado para que parezca su campo de texto con un cursor en él. Cambie para un UITextField cuando quiera entrada.

+0

No quiero que el teclado predeterminado sea aparecer. ¿Y cómo muestro un cursor en un UILabel? – Swastik

+0

Ah, entonces ¿estás diciendo que tu teclado personalizado no es un teclado como tal, es solo un conjunto de botones por lo que quieres falsificarlo todo? – Andiih

2

Registro como observador notificación teclado (por ejemplo, en el controlador de la vista en la que desea ocultar el teclado): -

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideKeyboard:) name:UIKeyboardWillShowNotification object:nil]; 

Poner en el hideKeyboard: Función: -

-(void)hideKeyboard:(NSNotification *)notification { 

    for (UIWindow *keyboardWindow in [[UIApplication sharedApplication] windows]) { 
     for (UIView *keyboard in [keyboardWindow subviews]) { 
      if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES) { 

       keyboard.alpha = 0; 
      } 
     } 
    } 
} 

(Gracias a luvieere en thispost para mostrarme cómo obtener el teclado)

+0

No funciona para mí en iOS4. El método se llama pero ninguna vista tiene un prefijo de UIKeyboard –

+0

thnx feliz ... realmente útil quiero mostrar el cursor parpadeando en mi campo de texto sin mostrar el teclado y su trabajo realmente gr8 ... –

0

Hay 2 soluciones a su problema. 1) Configurar el alfa del teclado en 0 hará que el teclado sea invisible ... lo cual puede ser todo lo que desee. El cursor aparecerá

2) UITextField implementa el protocolo UITextInputTraits. Siempre llamará al teclado cuando se convierta en el primer respondedor. Tendrás que heredar de la clase o de la otra para cambiar ese comportamiento predeterminado.

Buena suerte.

Si nos dice lo que está tratando de lograr, podríamos sugerirle una forma más elegante de lograrlo.

Diviértete.

-1

¿Por qué incluso necesita el cursor? Creo que todo lo que necesita hacer es cuando el usuario presione una tecla en su propio teclado, puede actualizar el valor del texto de la entrada.

5

La respuesta a su problema es crear una vista para su teclado personalizado y luego editar la propiedad inputView de su UITextField y pasarle la vista de su teclado personalizado.

Espero que ayude.

+0

thanx ArturoVM funciona bien para mí –

4

Parece que lo que quiere es un UITextField con un teclado personalizado. Cree la clase CustomKeyboard : UIView y agregue botones/diseño a la vista. Luego, para su campo de texto simplemente establezca la propiedad inputView en una instancia de la clase CustomKeyboard textField.inputView = customKeyboard;. Deberá configurar también la propiedad inputView para que sea readwrite @property (readwrite, retain) UIView *inputView; Al configurar la propiedad inputView, los teclados estándar de iPhone no aparecerán cuando el campo de texto se convierta en el primero en responder.

+0

Si no necesita una funcionalidad de teclado personalizada (tal vez su entrada de texto es muy poco ortodoxa) y luego crear un UIView ficticio (sin especificar un marco) y hacer que el .inputView funcione bien. Luego simplemente llame a becomeFirstResponder en su textField. – HenryRootTwo

3

anula siguiendo dos métodos en UITextFieldDelegate. Tenga en cuenta que este enfoque es válido tanto para UITextField y UITextView (en cuyo caso se reemplaza los métodos correspondientes en UITextViewDelegate)

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
    if (!textField.inputView) { 
     //hides the keyboard, but still shows the cursor to allow user to view entire text, even if it exceeds the bounds of the textfield 
     textField.inputView = [[UIView alloc] initWithFrame:CGRectZero]; 
    } 
    return YES; 
} 

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    return NO; 
} 
Cuestiones relacionadas