2012-11-26 10 views
5

Se mantengo un valore fisso UITableViewCell con identificatore di riutilizzo = nil come ivar e restituisco questa istanza per una riga specifica, quindi ricarico la riga specificatamente utilizzando [tableView reloadRowsAtIndexPaths:withRowAnimation:], i contenuti della riga scompaiono (o talvolta sfarfallio). Quando scorro e ritorno, diventa di nuovo visibile. Se faccio [tableView reloadData] d'altra parte, non scomparirà.Perché UITableViewCell riutilizzato manualmente scompare sulla riga di ricarica?

  • Perché scompare quando ricarico la riga?
  • Perché no, quando ricarico l'intero tavolo?

Ecco un progetto di esempio: https://github.com/hannesoid/HOTableViewTests

Ho provato questo su iOS 6. So che il riutilizzo manualmente un'UITableViewCell in modo tale (con fuori reuseidentifier & dequeueing) non è in genere consigliabile, ma in alcuni scenari abbastanza statici semplificerebbe le cose.

risposta

1

UITableView è ottimizzato da Apple in modo che utilizzi una quantità ragionevolmente piccola di memoria e abbia comunque buone prestazioni quando le celle vengono visualizzate sullo schermo. Quando fai qualcosa di non standard come questo e elimini l'ottimizzazione, butti fuori l'intera macchina. Ecco cosa suggerisco. Se hai una riga specifica che stai tenendo come variabile di istanza, perché non provare semplicemente a dargli un nome univoco per reuseIdentifier? Lascia che sia il kit a risolverlo.

0

Non è una buona pratica rendere uguale a nil. Inizializza sempre reuseIdentifier con una stringa/nome. Lo cellForRowAtIndexPath ricarica le righe guardando al loro reuseIdentifiers. Se le celle memorizzate nella cache sono trovate con uno reuseIdentifier esistente, vengono visualizzate direttamente senza allocare e inizializzare una nuova. Rendendolo nil causa il problema. Quindi, crea [email protected]"cell" o qualcosa che ti piace. Questo risolverà il tuo problema.

Problemi correlati