2014-09-27 15 views
10

Sto usando IOX8 e Xcode 6. Ho creato una tabella con una cella customtype nello storyboard e ho inserito un'etichetta in essa. Ho inserito un numero di tag per l'etichetta nell'IB, in modo da poter recuperare un riferimento all'etichetta nel mio codice. Ma quando cerco di ottenere un riferimento all'etichetta all'interno del mio "cellForRowAtIndexPath", usando viewWithTag ottengo un NIL per l'etichetta:Perché UItableViewCell viewWithTag restituisce nil?

Questo sono le due righe di codice che sono importanti in cellForRowAtIndexPath:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"PlayerCell"]; 


UILabel *nameLabel = (UILabel *)[cell viewWithTag:1]; 

La riga "cell viewWithTag: 1" restituisce NIL, non capisco perché.

Ho anche provato "cell.contentView withWithTag: 1" e anche questo non ha funzionato.

Si tratta di un errore in IOS 8 o Xcode 6?

grazie

-Malena

+0

E per quanto riguarda la cella? Restituisce anche zero per la cella? Nel mio caso sto diventando nulla per la cella. –

+0

risposta a questa domanda è [qui] [1] [1]: http://stackoverflow.com/questions/26344106/viewwithtag-returns-nil-on-uitableviewcell-only-first-time –

+0

Forse stai caricando i dati prima che la vista sia visibile ... prova a reloadData in viewDidAppear – Yanchi

risposta

0

tenta di debug View Gerarchia.

  • Eseguire l'applicazione in modalità di debug;
  • Goto view, dove UITableViewController si trova;
  • In Xcode fare clic su: Debug-> Visualizza debug-> Cattura vista gerarchia;
  • Ispezionare le etichette meteo sono state assegnate correttamente.
+0

nice skill, ma non funziona per questo problema. – c9s

5

Ho incontrato lo stesso problema quando stavo usando IOS8 e Xcode 6.1. Ho scoperto che se abilito lo Size Classes, restituisco sempre nil. Penso che potrebbe essere un bug per Xcode 6.x. Basta disabilitare lo Size Classes, tutto va bene.

+0

funziona, è piuttosto strano. – c9s

11

Deseleziona l'opzione Classi di dimensioni nello storyboard e pulisci l'app &. Dovrebbe funzionare ora.

+2

Esiste una soluzione alternativa se è necessario abilitare ** Classi di dimensioni **? –

+3

Deseleziona clean & build e ricontrolla l'opzione Classi di dimensioni –

0

Se il controller di visualizzazione iniziale era la mia vista tabella, allora tutto ha funzionato come previsto. Quando proveniva da un altro controller di visualizzazione, avevo problemi.

Nel mio caso, nel precedente controller della vista ho avuto:

RoutePreview *rs = [[RoutePreview alloc] init]; 
rs.rota = [availableRoutes objectAtIndex:indexPath.row]; 

[self.navigationController pushViewController:rs animated:YES]; 

ho sostituito questo con

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"SBIPhone" bundle:[NSBundle mainBundle]]; 
RoutePreview *xpto = [storyboard instantiateViewControllerWithIdentifier:@"RouteSummary"]; 
xpto.rota = [availableRoutes objectAtIndex:indexPath.row]; 
[self.navigationController pushViewController:xpto animated:YES]; 

Il problema non c'era più.

Fondamentalmente invece di istanziare direttamente il controllo tabellaview, istanziarlo dall'identificatore e non più nill cella in tableView dequeueReusableCellWithIdentifier o cell viewWithTag: restituendo nil.

2

cercare di rendere la vista 'installed', check this link:

+1

Qualche lavoro serio deve essere fatto su queste classi di dimensioni "installate" !! –

0

avevo mistakingly fatti 2 prototipi di UITableViewCell, uno sul storyboard in cui ho dato il numero di tag e uno nel mio codice in cui ho registrato il File di pennini di esso. Ciò ha causato un disguido e non ho potuto ottenere una sospensione della vista con il tag. My ad es., let nib = UINib(nibName: "DetailTableViewCell", bundle: nil) tableView.register(nib, forCellReuseIdentifier: "headerViewCell")

La rimozione dello snippet precedente dal mio codice ha risolto il problema. Spero che questo aiuti chiunque con un problema simile.

Problemi correlati