2012-10-12 16 views
6

Ho un UITableView con celle personalizzate al suo interno. Questa cella personalizzata si presenta come una cella normale con lo stile "Dettaglio a sinistra". Ma la mia cella personalizzata ha un'etichetta di dettaglio e un campo di testo, per consentire all'utente di modificare il testo. Ho un pulsante Salva dove voglio salvare tutti i dati inseriti dall'utente. Ho creato la cella personalizzata utilizzando questo tutorial: http://agilewarrior.wordpress.com/2012/05/19/how-to-add-a-custom-uitableviewcell-to-a-xib-file-objective-c/#comment-4883IndexPathForCell di UITableView: restituisce sempre 0 come indexPath.row

Per ottenere i dati utente, ho impostato il delegato del campo di testo sul controller della vista tabella (self) e implementato il metodo textFieldDidEndEditing :. In questo metodo chiedo la vista padre del campo di testo (= cella) e chiedo il indexPath di questa cella. Il problema è che ottengo sempre 0 per indexPath.row, non importa quale cella modifico. Che cosa sto facendo di sbagliato?

Ecco il mio codice:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:[CustomCell reuseIdentifier] forIndexPath:indexPath]; 
if (cell == nil) { 
    [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil]; 
    cell = self.customCell; 
    self.customCell = nil; 
} 

cell.label.text = @"Some label text"; 
cell.editField.delegate = self; 
cell.accessoryType = UITableViewCellAccessoryNone; 

return cell; 
} 

- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
CustomCell *cell = (CustomCell *) textField.superview; 

NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 

NSLog(@"the section is %d and row is %d", indexPath.section, indexPath.row); 
... 
} 

EDIT: ho appena scoperto, che l'indexPath restituito è pari a zero. Quindi se è nulla ottengo i valori standard 0, va bene. Ma ora: perché ottengo nil per indexPath?

+0

Questo è un thread simile che spiega il motivo di http://stackoverflow.com/questions/6930026/tableviewindexpathforcell-returns-nil –

risposta

6

Ho appena trovato me stesso la soluzione. Ho trovato il codice per la superview in StackOverflow, quindi l'ho appena copiato. Ma questo non funziona. Hai bisogno di fare due interviste come questa:

CustomCell *cell = (CustomCell *) textField.superview.superview; 

Ora funziona correttamente!

0

Potrebbe basta aggiungere una proprietà index al vostro CustomCell e popolarlo con indexPath.row all'interno (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

+0

Buona idea, l'ho fatto, ma ricevo un errore che dice "selettore non riconosciuto inviato all'istanza. .. [UITableViewCellContentView indexPath] "(Ho chiamato la proprietà indexPath). Quindi, sono un po 'confuso sul motivo per cui cell è ora un UITableViewCellContentView e non il mio CustomCell. – tester

Problemi correlati