2011-09-07 22 views
7

Mi código:¿Cómo añadir campo de texto para inputAccessoryView y hacer que el primer nivel de respuesta Textview

- (void)viewDidLoad { 

    [super viewDidLoad]; 

    CGRect rectFake = CGRectZero; 

    UITextField *fakeField = [[UITextField alloc] initWithFrame:rectFake]; 

    [self.view addSubview:fakeField]; 

    UIView *av = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 0.0, 39.0)]; 

    av.backgroundColor = [UIColor darkGrayColor]; 

    CGRect rect = CGRectMake(200.0, 4.0, 400.0, 31.0); 

    UITextField *textField = [[UITextField alloc] initWithFrame:rect]; 

    textField.borderStyle = UITextBorderStyleRoundedRect; 

    textField.font = [UIFont systemFontOfSize:24.0]; 

    textField.delegate = self; 

    [av addSubview:textField]; 

    fakeField.inputAccessoryView = av; 

    [fakeField becomeFirstResponder]; 

} 

He intentado añadir

[textField becomeFirstResponder] 

al final, pero no realiza trabajo.

Otro problema que delega el método para ocultar el teclado cuando se presiona ENTRAR tampoco funciona.

- (BOOL) textFieldShouldReturn:(UITextField *)textField { 

    [textField resignFirstResponder]; 

    return YES; 
} 
+0

probar esto UIView * av = [[UIView alloc] initWithFrame: CGRectMake (0.0, 0.0, 320.0, 39.0)]; –

+0

Lo siento, no mencioné que es para iPad y esta vista se extiende a lo largo del teclado, por lo que el ancho no tiene sentido. – Michael

Respuesta

13

Me enfrentaba el mismo desafío. Su enfoque (y mi inicial) probablemente no funcione porque el campo de texto en el inputAccessoryView se niega a convertirse en el primero en responder ya que el UITextField no se encuentra inicialmente en su pantalla.

Mi solución: ¡compruebe cuando aparece el teclado (y con eso la vista de accesorios)!

Paso 1) Escuche la notificación (asegúrese de que este código se ejecute antes de que desee recibir la notificación).

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(changeFirstResponder) 
              name:UIKeyboardDidShowNotification 
              object:nil]; 

Paso 2) Cuando ha aparecido el teclado, se puede establecer el campo de texto en su inputAccessoryView para convertirse primero en responder:

-(void)changeFirstResponder 
{ 
    [textField becomeFirstResponder]; // will return YES; 
} 
+0

Estoy tratando de lograr lo mismo y su idea parece que podría funcionar, sin embargo, ¿cómo le dice al teclado que aparezca en primer lugar? Tengo un UIButton que cuando lo presiona necesito que el teclado se muestre con un campo de texto en la vista de accesorios. – Darren

+0

@Darren Sé una solución semi-sucia y eso es tener un campo de texto (oculto) en su vista actual y usar la acción del botón para establecer '[yourHiddenTextField becomeFirstResponder]' – Tom

+0

Eso es exactamente lo que necesitaba hacer. Thx – Darren

Cuestiones relacionadas