2011-09-07 8 views
7

Il mio codice:Come aggiungere campo di testo per inputAccessoryView e rendere il textView prima risponditore

- (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]; 

} 

Ho provato ad aggiungere

[textField becomeFirstResponder] 

alla fine, ma lo fa senza lavoro.

Un altro problema che delega il metodo per nascondere la tastiera quando si preme INVIO non funziona anche.

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

    [textField resignFirstResponder]; 

    return YES; 
} 
+0

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

+0

Mi spiace di non aver detto che è per iPad e questa vista si estende lungo la tastiera, quindi la larghezza non ha senso. – Michael

risposta

13

Mi trovavo di fronte alla stessa sfida. Il tuo (e il mio iniziale) approccio probabilmente non funziona perché il campo di testo nel inputAccessoryView si rifiuta di diventare il primo risponditore poiché lo UITextField inizialmente non si trova sullo schermo.

La mia soluzione: controlla quando appare la tastiera (e con quella vista accessoria)!

Passaggio 1) Ascoltare la notifica (assicurarsi che questo codice venga eseguito prima di voler ricevere la notifica).

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

Fase 2) Quando è apparsa la tastiera, è possibile impostare il campo di testo nella vostra inputAccessoryView di diventare first responder:

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

Sto cercando di ottenere la stessa cosa e la tua idea sembra funzionare, tuttavia come fai a dire alla tastiera di apparire in primo luogo? Ho un UIButton che quando premuto mi serve che la tastiera mostri con un campo di testo nella vista accessoria. – Darren

+0

@Darren Conosco una soluzione semi-dirty e cioè avere un campo di testo (nascosto) nella tua vista corrente e usare l'azione del pulsante per impostare '[yourHiddenTextField becomeFirstResponder]' – Tom

+0

Questo è esattamente ciò che mi serviva da fare. Thx – Darren

Problemi correlati