2016-08-30 4 views
0

Nach dem Drücken einer Taste auf einem meiner benutzerdefinierten TableViewCells möchte ich ein Bild auf anderen benutzerdefinierten TableViewCells ausblenden/einblenden. Meine Zellen sind in Sektionen geordnet.UITableView neu laden Abschnitt während der Anzeige

Die Änderungen werden wirksam, wenn ich den Knopf drücke, zu einer anderen Ansicht wechsle und dann zu meinem TableView zurückkomme. Ich möchte, dass die Änderungen sofort angezeigt werden, ohne dass die Ansichten gewechselt werden müssen.

Mein Code:

 let otherCellIndexPath = IndexPath(item: 0, section: 0) 
     let otherCell = tableView.cellForRow(at: oldIndexPath) as! CustomTableViewCell 
     otherCell.hideImage() 

     let currentCell = tableView.cellForRow(at: indexPath) as! CustomTableViewCell 
     currentCell.showImage() 

     tableView.beginUpdates() 
     tableView.reloadSections([otherCellIndexPath,indexPath], with: .none) 
     tableView.endUpdates() 

Was bin ich? (mit Xcode 8 b6, Swift 3)

+0

Haben Sie 'tableview.reloadData()' versucht? – John

+1

entfernen Sie einfach ein Objekt aus dem Array, das Sie ausblenden möchten, und laden Sie Ihre Tabellenansicht neu. –

Antwort

1

Ich vermeide es cellForRow in meinem Code aufzurufen. Stattdessen führe ich ein Wörterbuch für den Zustand jeder Zelle wie

var dictSection0 = [["ImageName" : "SampleImageSection0Row0","hidden":true],["ImageName" : "SampleImageSection0Row1","hidden":false]] 

var dictSection1 = [["ImageName" : "SampleImageSection1Row0","hidden":true],["ImageName" : "SampleImageSection1Row1","hidden":false]] 
var tableDataModel = [dictSection0,dictSection1] 

Auf die Schaltfläche tippen würde ich das Wörterbuch ändern. Im obigen Fall Einstellung für Zeile 1 des Abschnitts 0 bis wahr versteckt

var rowDict = tableDataModel[0][1] 
rowDict["hidden"] = true 

und dann laden Sie die gesamte Tabelle (oder einen Teil davon, wie Sie tun), um die Änderungen widerzuspiegeln.

In der cellForRow atIndexPath-Methode wird dieses Wörterbuch zum Anzeigen/Verbergen des Bildes in der Zelle verwendet.

var rowData = tableDataModel[indexPath.section][indexPath.row] 
let tableCell = tableView.dequeueReusableCellWithIdentifier("customCell", forIndexPath: indexPath) 
tableCell.imageView.hidden = rowDict["hidden"] 
1

Was @Manali vorschlagen tun sollten, rufen tableView.reloadSections löst eine Reihe fordert cellForRowAtIndexPath, innerhalb dieser Methode kann die Zelle Aus der Warteschleife angenommene nicht genau das gleiche Objekt wie die von Ihnen bekommen cellForRow Aufruf, rechts Möglichkeit besteht darin, die Informationen über das Ein-/Ausblenden zu speichern und das Bild darin ein-/auszublenden. cellForRowAtIndexPath

Verwandte Themen