2010-05-13 12 views
5

Nel mio progetto iPhone sto usando UITableview con UITableViewCells contenente UITextfields. Ho visto in molte app che è possibile utilizzare un pulsante successivo per passare al campo di testo successivo nella cella successiva. Qual è il modo migliore per farlo?iPhone: vai al prossimo campo uite in uitableview, come?

La mia idea è di ottenere il indexPath della cella con il campo di testo che si sta modificando e quindi ottenere la cella successiva da cellForRowAtIndexPath. Ma come posso ottenere il indexPath della cella che sto attualmente modificando?

Grazie!

risposta

8
  1. Conservare i riferimenti alle istanze UITextField nella visualizzazione tabella.
  2. Assegnare valori di tag univoci alle istanze UITextField.
  3. Nel tuo ultimo campo di testo, è possibile impostare il suo tipo di chiave di ritorno, che cambia etichetta del tasto di ritorno della tastiera da "Avanti" per "Fatto": [finalTextField setReturnKeyType:UIReturnKeyDone];

Nel metodo UITextField delegato -textFieldShouldReturn:, a piedi attraverso il responder:

- (BOOL) textFieldShouldReturn:(UITextField *)tf { 
    switch (tf.tag) { 
     case firstTextFieldTag: 
      [secondTextField becomeFirstResponder]; 
      break; 
     case secondTextFieldTag: 
      [thirdTextField becomeFirstResponder]; 
      break; 
     // etc. 
     default: 
      [tf resignFirstResponder]; 
      break; 
    } 
    return YES; 
} 
+0

Grazie! Ma sto solo tenendo traccia del campo di testo corrente in quanto vi sono molti campi di testo. Posso in qualche modo ottenere il prossimo campo di testo senza usare i tag? – Mrbiggerm

+0

Certo, tieni solo i riferimenti, 'UITextField * firstTextField', o usa un array, ecc. Ma i tag sono probabilmente il modo più veloce per identificare il campo di testo del delegato. –

+0

Ma se non voglio tenere traccia di tutti i campi di testo o tag? Posso in qualche modo ottenere la cella corrente in cui si trova il campo di testo attualmente in fase di modifica e quindi ottenere il percorso dell'indice? – Mrbiggerm

0

Assumendo l'UITextField è stato aggiunto al UITableViewCell come qui di seguito

UITableViewCell *cell; 
UITextField *textField; 
... 
textField.tag = kTAG_TEXTFIELD; 
[cell.contentView addSubview:textField]; 
... 

È possibile ottenere il percorso dell'indice corrente tramite

-(BOOL)textFieldShouldReturn:(UITextField *)textField { 
    if([textField.superView.superView isKindOfClass:[UITableViewCell class]]) { 
    UITableViewCell *cell = (UITableViewCell *)textField.superView.superView; 
    NSIndexPath *indexPath = [self.myTableView indexPathForCell:cell]; 
    } 
    ... 

UITextField La prossima della riga sarebbe allora

NSIndexPath *indexPathNextRow = [NSIndexPath indexPathForRow:(indexPath.row+1) inSection:indexPath.section]; 
UITableViewCell *cellNextRow = (UITableViewCell *)[self.myTableView cellForRowAtIndexPath:indexPathNextRow]; 
UITextField *textFieldNextRow = (UITextField *)[cellNextRow.contentView viewWithTag:kTAG_TEXTFIELD]; 

Speranza che aiuta!

+0

In iOS7 sarà necessario sostituire textField.superView.superView con textField.superView.superView.superView – Homam

Problemi correlati