2009-04-25 12 views

Respuesta

22

Si puede obtener el objeto UIKeyboard en sí mismo (algo que no está expuesto en el SDK, entonces, Apple podría no estar satisfecho si utiliza estas llamadas), entonces hay una conveniente función setReturnKeyEnabled: member.

id keyboard = [self magicallyGetAUIKeyboardInstance]; 
[keyboard setReturnKeyEnabled: NO]; 

(a través de Erica Sadun's dump de los marcos iPhone 2.2)

La implementación de magicallyGetAUIKeyboardInstance se describe here.

+0

No he tenido la oportunidad de probarlo todavía, pero ¿no debería funcionar solo el [UIKeyboard activeKeyboard]? –

+0

¿Es seguro que Apple rechazará una aplicación que use este código? Incluso si la implementación es apropiada? – samvermette

+0

@sam Es muy poco probable que Apple pruebe su llamada a este método, pero es posible que cambien la API subyacente y rompan su código. – bshirley

2

Una buena idea es crear un archivo para acceder a esta clase desde cualquier lugar. Aquí está el código:

UIKeyboard.h

#import <UIKit/UIKit.h> 

@interface UIApplication (KeyboardView) 

    - (UIView *)keyboardView; 

@end 

UIKeyboard.m

#import "UIKeyboard.h" 

@implementation UIApplication (KeyboardView) 

- (UIView *)keyboardView 
{ 
    NSArray *windows = [self windows]; 
    for (UIWindow *window in [windows reverseObjectEnumerator]) 
    { 
     for (UIView *view in [window subviews]) 
     { 
      if (!strcmp(object_getClassName(view), "UIKeyboard")) 
      { 
       return view; 
      } 
     } 
    } 

    return nil; 
} 

@end 

Ahora se puede importar y tener acceso a esta clase de su propia clase:

#import "UIKeyboard.h" 

    // Keyboard Instance Pointer. 
    UIView *keyboardView = [[UIApplication sharedApplication] keyboardView]; 

Una documentación completa de esta clase se puede encontrar aquí:http://ericasadun.com/iPhoneDocs/_u_i_keyboard_8h-source.html

Más información se puede encontrar aquí:http://cocoawithlove.com/2009/04/showing-message-over-iphone-keyboard.html

+6

Probabilidad de rechazo de la tienda de aplicaciones: 100% – Barry

64

puede estar siguiendo segmento de código ayuda.

textfield.enablesReturnKeyAutomatically = YES; 

Esto está públicamente disponible en iPhone SDK en UITextInputTraits. Al usar esto, la tecla de retorno se desactivará cuando no haya texto de entrada disponible en el campo de texto

+60

@ Pyraego.com, sin falta de respeto, pero ¿cómo es un "buen hallazgo" cuando esta respuesta ya estaba contenida en la pregunta del OP? –

+1

En Swift: textfield.enablesReturnKeyAutomatically = true – AmyNguyen

+3

Puede sonar tonto, pero quería esta respuesta cuando vine aquí. Al igual que creo que mucha gente lo hace, hice clic ciegamente en el primer enlace que apareció en Google, salté la pregunta por completo y leí las primeras dos respuestas –

21

UITextField La propiedad enablesReturnKeyAutomatically se puede configurar directamente en Interface Builder, simplemente seleccione el campo de texto y abra el inspector de atributos. Como declaró Tharindu, esto habilitará y deshabilitará automáticamente la tecla de retorno dependiendo de si se ha ingresado algún texto.

enter image description here

Por supuesto, si necesita cambiar esto en código que todavía se puede establecer mediante programación utilizando nameTextField.enablesReturnKeyAutomatically = true.

EDITAR para hacer frente a los downvotes:

De lo contrario, no hay manera oficial para activar y desactivar la tecla de retorno a la orden. Recomendaría no intentar usar API privadas para lograr esto. Alternativamente, puede usar el método delegado textFieldShouldReturn: y poner allí su condicional/validación y responder en consecuencia.

8

Puede anular UITextField 's hasText de atributos para lograrlo:

class CustomTextField : UITextField { 
    override public var hasText: Bool { 
     get { 
      return evaluateString(text) 
     } 
    } 
} 

Dónde evaluateString(_ text: String?) -> Bool cheques contra sus criterios de entrada necesarios, por ejemplo, recuento de caracteres.

Por supuesto, esto solo funciona en combinación con enablesReturnKeyAutomatically = true en el UITextField.

Soy consciente de que mi respuesta no es oportuna ni está escrita en Objective-C, pero dado que no he podido encontrar una respuesta en otro lugar y se hace referencia rutinaria a esta pregunta en otros hilos, creo que aquí está el mejor lugar para publicarlo.

+0

Esto funciona, pero hace que la contraseña del teclado El accesorio nunca desaparezca. – Sethmr

Cuestiones relacionadas