2015-05-10 23 views
17

Ich habe eine TabelleView eingerichtet, so dass wenn eine Zelle berührt wird, es in der Höhe erweitert, um mehr Informationen zu offenbaren. Das TableView hat 5 Abschnitte.tableView Abschnitt Header verschwinden SWIFT

Ich habe einen Fehler: Wenn eine Zelle erweitert wird, werden alle Headerzellen unterhalb dieser Zelle unsichtbar. Die Konsole gibt Folgendes aus: "[31233: 564745] kein Indexpfad für die Tabellenzelle, die wiederverwendet wird"

In meinem Storyboard habe ich 2 benutzerdefinierte Zellen: "myCell" für die Daten tragenden Zellen und "headerCell" für die Header .

func Tableview (Tableview: UITableView, DidSelectRowAtIndexPath indexPath: NSIndexPath) {

let thisGoal : GoalModel = goalArray[indexPath.section][indexPath.row] 


    if self.currentPath != nil && self.currentPath == indexPath { 
     self.currentPath = nil 
    } else { 
     self.currentPath = indexPath 
    } 
    tableView.beginUpdates() 
    tableView.endUpdates() 
} 

Wenn ich tableView.reloadData() zwischen dem Beginn/Ende Updates eingeben, funktioniert es richtig, obwohl der Header Hintergrund wird schwarz und verliert Animation.

Ich habe alle Zeug für Header deklariert in: func tableView (tableView: UITableView, viewForHeaderInSection Abschnitt: Int) -> UIView?

was fehlt mir? Ich möchte wirklich, dass das TableView noch Animationen hat, und den Hintergrund clearColor() behalten.

Vielen Dank im Voraus. Ich habe die Ziel-C-Antworten gelesen, konnte sie aber nicht für mich arbeiten lassen. Ich würde wirklich etwas SWIFT-Hilfe schätzen.

Ich denke, das Problem ist der keine Index-Pfad für die Tabelle Zelle wiederverwendet werden.

Antwort

66

Ich habe eine Antwort in der Konsolenausgabe gefunden. Verwenden Sie diesen Code in der Header-Funktion:

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? 

nicht zurückkehren Ihre headerCell oder Ihre wieder verwendbare Kennung. Gib die reuseIdentifier.contentView zurück. Für mich ist es: return headerCell!.contentView.

+1

Vielen Dank @Mason – Sarasranglt

+1

Ich bekomme transparente Header-Ansicht in diesem Fall. –

+0

Sollte als die richtige Antwort akzeptiert werden. – OhadM

8

Da ich noch nicht 50 Reputation habe, kann ich die vorherige Antwort nicht kommentieren, also entschuldige ich mich dafür, diese als eine andere Antwort aufgelistet zu haben.

Rückkehr die InhaltAlle wird die Funktion der Arbeit machen, sondern entfernt alle zum reuseIdentifier (headerCell) getan Formatierung

headerCell.backgroundColor = UIColor.cyanColor() 

dies kein Cyan Farbe Ihres headerCell liefert

Um dies zu beheben, nur die „.contentView“, um Ihre Formatierung Zeilen hinzufügen

headerCell.contentView.backgroundColor = UIColor.cyanColor() 
6

nur hinzufügen, ich war für WAY verwirrt mehr, als ich sein sollte, warum ich couldn‘ Ich beziehe mich auf die contentView meiner Zelle, als ich ganz klar sehen konnte, dass es da war. Meine benutzerdefinierte Klasse (mit UITableViewCell anstelle von UITableViewHeaderFooterView) würde jedes Mal einen schwerwiegenden Fehler zurückgeben.stellen Sie sicher, daher jede individuelle Styling-Setup unter UITableViewHeaderFooterView Klasse wie:

class CustomHeaderCell: UITableViewHeaderFooterView { 

Sie müssen auch die resuableIdentifer wie folgt registrieren:

tableView.registerNib(UINib(nibName: "HeaderCell", bundle: nil), forHeaderFooterViewReuseIdentifier: "CellHeader") 

Dann ist dieses Bad Boy:

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
    let headerCell = tableView.dequeueReusableHeaderFooterViewWithIdentifier("CellHeader") as! CustomHeaderCell! 
    return headerCell!.contentView 
} 
+0

keine Notwendigkeit, UITableViewHeaderFooterView hinzufügen, wenn die Klasse in UITableViewController erweitert wird. danke für die headerCell! .contentView antwort – Led

+0

Es ist nicht obligatorisch zu verwenden UITableViewHeaderFooterView, ich benutze UITableViewCell klasse, aber der schlüssel war die cell.contentView eher die zelle selbst zurückgeben. Die Rückkehr der ganzen Zelle verursachte das Problem für mich. – satheeshwaran

+0

Hinzufügen von .contentView gespeichert meinen Tag – Grease

3

Tabellenansichts-Header in 2 Tabellen verschwanden, als ich meine App in IOS 10 umwandelte - Ich fand den Grund in der API-Dokumentation von Apple Developer zu Tabellenköpfen. Als ich folgendes hinzugefügt habe, sind die fehlenden Header wieder aufgetaucht!

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat 
{ 
return 44 // where 44 is the header cell view height in my storyboard 
} 
Verwandte Themen