2012-01-16 17 views
24

Sto creando una vista tabella con UITextField s dinamicamente.Impostare lo stato attivo su UITextField in tableCell

l_textField = [[UITextField alloc] initWithFrame:TextFieldFrame]; 
l_textField.tag = cellRow; 

l_textField.delegate = self; 
l_textField.font = [UIFont boldSystemFontOfSize:14]; 
l_textField.textColor = [UIColor blackColor]; 
[l_textField setEnabled:YES]; 

[cell.contentView addSubview:l_textField]; 

E ora voglio mettere a fuoco questo campo di testo quando l'utente tocca la cella. Scrivo questo

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)newIndexPath { 
    UITextField* field = (UITextField *) [tblView viewWithTag: newIndexPath.row]; 
    [field resignFirstResponder]; 
} 

Ma questo non funziona

risposta

59

cambiamento [field resignFirstResponder]; con [field becomeFirstResponder];

resignFirstResponder viene utilizzato per rimuovere la tastiera (messa a fuoco) dal campo di testo

+0

Nulla è accaduto, penso che sia così siccome ho impostato tblView.allowsSelection = NO; E questo evento non è successo. Ma IF I Set tblView.allowsSelection = YES; Seleziona solo cella = ( – nabiullinas

+0

Ho tentato di implementare tale approccio, tuttavia questo non funziona in genere. Provare ad assegnare UITextField a [textField becomeFirstResponder] deve impostare la selezione abilitata o impostata su YES/true. –

1

Ho affrontato lo stesso problema qui, anche utilizzando correttamente il [field becomeFirstResponder];.

Ho utilizzato anche i tag per ottenere gli oggetti che ho nella cella. Il tuo didSelectRowAtIndexPath dovrebbe essere simile per ottenere la cella di destra:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    currentRow = indexPath.row; 

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    UITextField *indexField = (UITextField *)[cell viewWithTag:101]; 
    [indexField becomeFirstResponder]; 
} 

Ha funzionato come un fascino per me.

0

Swift 3

myTextField.becomeFirstResponder() 

mio codice. Prendi il percorso dell'indice della cella corrente. E ottenere la cella del prossimo indexpath.row. E chiamato ** cell1.txtFindings.becomeFirstResponder() **

if let textFieldIndexPath = specsListView.indexPath(for: cell){ 
     let newIndexPath = IndexPath(row: textFieldIndexPath.row + 1, section: 0) 

     if let cell1: SpecsTableViewCell = specsListView.cellForRow(at: newIndexPath) as? SpecsTableViewCell{ 
      cell1.txtFindings.becomeFirstResponder() 
     } 
} 
Problemi correlati