Ho permesso all'utente di riordinare le righe in tableView
. Poiché questo evento influisce sul contenuto: alcuni valori numerici nelle celle devono essere aggiornati: in tutte le altre righe, chiamo uno reloadData
in moveRowAtIndexPath
. E poi si verificano effetti strani.Come ricaricare tableview dopo aver riordinato una riga? Le file hanno un'altezza variabile
I.e. le celle sembrano sovrapposte quando si tocca il trascinatore e alcune celle iniziano a muoversi su e giù. È importante sapere che l'altezza delle celle è variabile.
Lo strano, che se rimuovo reloadData
da moveRowAtIndexPath
, allora tutti questi fenomeni scompaiono. Solo il contenuto non è valido.
Quindi, come devo ricaricare i dati dopo il riordino?
UPDATE: Quello che ho fatto le cellule frattempo la riconfigurazione in viewDidLayoutSubviews
invece di chiamata reloadData
fine del moveRowAtIndexPath
. E funziona al 90% come mi aspetto, ma le righe ancora sono a volte un po 'più alte che dovrebbero.
override func tableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath) {
//..
reorderOccured = true
}
override func viewDidLayoutSubviews() {
if reorderOccured {
for cell in tableView.visibleCells() as! [UITableViewCell] {
let ip = tableView.indexPathForCell(cell)
if ip != nil {
self.configureCell(cell, indexPath: ip!)
}
}
reorderOccured = false
}
}
potresti trovare interessante anche questo: http://stackoverflow.com/questions/30758111/an-extra-view-appears-in-cell-when-pressing-reorder-dragger-why –