Ich möchte den UITableView
Header für jeden Abschnitt anpassen . Bisher habe ich implementiert
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
diese UITabelViewDelegate
Methode. Was ich tun möchte, ist, den aktuellen Header für jeden Abschnitt UILabel
abzurufen und ihn einfach als Unteransicht hinzuzufügen.
Bisher kann ich das nicht erreichen. Weil ich nichts gefunden habe, um den Standardabschnittskopf zu erhalten. Erste Frage: Gibt es eine Möglichkeit, den Standardabschnittskopf zu erhalten ?
Wenn dies nicht möglich ist, muss ich eine Containeransicht erstellen, bei der es sich UIView
jedoch um eine Standardansicht handelt. Diesmal muss ich jedoch die Standardhintergrundfarbe, die Schattenfarbe usw. festlegen. Wenn Sie sich die Kopfzeile des Abschnitts genau ansehen, ist sie bereits angepasst.
Wie kann ich diese Standardwerte für jeden Abschnittskopf erhalten?
Danke euch allen.
quelle
tableView:titleForHeaderInSection:
?NSString
, ich muss benutzerdefinierte Schriftart einstellen, damit ich nicht kann, wenn ichtableView:titleForHeaderInSection:
Antworten:
Sie können dies versuchen:
quelle
Die ausgewählte Antwort mit
tableView :viewForHeaderInSection:
ist korrekt.Nur um hier einen Tipp zu teilen.
Wenn Sie Storyboard / xib verwenden, können Sie eine weitere Prototypzelle erstellen und diese für Ihre "Abschnittszelle" verwenden. Der Code zum Konfigurieren des Headers ähnelt dem Konfigurieren für Zeilenzellen.
quelle
viewForHeaderInSection
nichtcanEditRowAtIndexPath
wie Sie erwähnt. Ich überprüfe nie den Absturz, den Sie gesagt haben, aber können Sie aufklären, wie ein langes Drücken einen Absturz verursacht?UITableViewCell
als Header-Ansicht verwenden. Es wird sehr schwierig sein, visuelle Störungen zu beheben - der Header verschwindet manchmal, weil Zellen aus der Warteschlange entfernt werden, und Sie werden stundenlang nach dem Grund suchen, warum dies so ist, bis Sie feststellen, dassUITableViewCell
es nicht zumUITableView
Header gehört.UITableViewCell
als Header ist einfach falsch.Schnelle Version von Lochana Tejas Antwort:
quelle
override
Schlüsselwort ist redundant. Darüber hinaus sollten Sie Header-Ansichten wiederverwenden, anstatt sie neu zu erstellen.Wenn Sie die Standard-Header-Ansicht verwenden, können Sie den Text nur mit ändern
Für Swift:
Wenn Sie die Ansicht anpassen möchten, müssen Sie selbst eine neue erstellen.
quelle
Warum nicht UITableViewHeaderFooterView verwenden ?
quelle
Wenn headerInSection nicht angezeigt wird, können Sie dies versuchen.
Dies gibt eine Höhe für die Kopfzeile eines bestimmten Abschnitts zurück.
quelle
Swift 3 Version von Lochana und Estemendoza antwortet:
Beachten Sie außerdem, dass Sie AUCH Folgendes implementieren müssen:
quelle
Versuche dies......
quelle
Mit den anderen Antworten wird die Standard-Header-Ansicht gut wiederhergestellt, aber Ihre Hauptfrage wird nicht beantwortet:
Es gibt einen Weg - implementieren
tableView:willDisplayHeaderView:forSection:
Sie ihn einfach in Ihrem Delegaten. Die Standard-Header-Ansicht wird an den zweiten Parameter übergeben. Von dort aus können Sie sie in eineUITableViewHeaderFooterView
umwandeln und dann nach Bedarf Unteransichten hinzufügen / ändern.Obj-C
Schnell
quelle
view
.quelle
Dies ist die einfachste mögliche Lösung. Der folgende Code kann direkt zum Erstellen einer benutzerdefinierten Abschnittsüberschrift verwendet werden.
HINWEIS: SectionHeaderTableViewCell ist eine benutzerdefinierte UITableViewCell, die in Storyboard erstellt wurde.
quelle
Wenn ich Sie wäre, würde ich eine Methode erstellen, die eine UIView zurückgibt, wenn ein NSString enthalten ist. Beispielsweise
Erstellen Sie bei der Implementierung dieser Methode eine UIView, fügen Sie ihr ein UILabel mit den Eigenschaften hinzu, die Sie festlegen möchten, und setzen Sie den Titel natürlich auf die angegebene.
quelle
@ Samwizes Lösung in Swift (also stimme ihm zu!). Genial, wenn der gleiche Recyclingmechanismus auch für Kopf- / Fußzeilen verwendet wird:
quelle
Wenn Sie die Schriftart des textLabel in Ihrer Abschnittsüberschrift ändern möchten, möchten Sie dies in willDisplayHeaderView tun. Um den Text festzulegen, können Sie dies in viewForHeaderInSection oder titleForHeaderInSection tun. Viel Glück!
quelle
Vollständiges Beispiel für 2019 zum Kopieren und Einfügen
Stellen Sie zuerst "Gruppiert" im Storyboard ein: Es muss zur Init-Zeit geschehen, Sie können es später nicht wirklich festlegen, daher ist es einfacher, sich daran zu erinnern, es im Storyboard zu tun:
Nächster,
Muss heightForHeaderInSection aufgrund eines Apple-Fehlers implementieren .
Es gibt immer noch einen Apple-Fehler - seit zehn Jahren - bei dem der erste Header (dh Index 0) einfach nicht angezeigt wird, wenn Sie keinen haben
heightForHeaderInSection
Anruf haben.Also,
tableView.sectionHeaderHeight = 70
funktioniert einfach nicht, es ist kaputt .Das Setzen eines Rahmens bringt nichts:
Im
viewForHeaderInSection
einfach eine UIView erstellen ().Es ist sinnlos / erreicht nichts, wenn Sie UIView (Frame ...) da iOS einfach die Größe der Ansicht der Tabelle festlegt.
Die erste Zeile von
viewForHeaderInSection
wird also einfach seinlet view = UIView()
und das ist die Ansicht, die Sie zurückgeben.Das war's - alles andere ist Zeitverschwendung.
Ein weiteres "pingeliges" Apple-Problem.
Die oben verwendete Komforterweiterung lautet:
quelle
Fügen Sie den Tabellenansichtskopf auf magische Weise schnell hinzu
Kürzlich habe ich das versucht.
Ich brauchte einen und nur einen Header in der gesamten UITableView.
Als ob ich eine UIImageView oben in der TableView haben wollte. Also habe ich ein UIImageView über der UITableViewCell hinzugefügt und es wurde automatisch als tableViewHeader hinzugefügt. Jetzt verbinde ich die ImageView mit dem ViewController und füge das Image hinzu.
Ich war verwirrt, weil ich so etwas zum ersten Mal gemacht habe. Um meine Verwirrung zu beseitigen, öffnen Sie das XML-Format des MainStoryBoard und stellen Sie fest, dass die Bildansicht als Header hinzugefügt wurde.
Es hat bei mir funktioniert. Danke xCode und schnell.
quelle
Rufen Sie diese Delegate-Methode auf
Dies gibt die Möglichkeit, automatisch einen Standardheader mit dynamischem Titel hinzuzufügen.
Sie können wiederverwendbare und anpassbare Kopf- / Fußzeilen verwenden.
https://github.com/sourov2008/UITableViewCustomHeaderFooterSection
quelle
swif 4.2
quelle
Neben titleForHeaderInSection können Sie einfach die Ansicht von Kopf- und Fußzeile ändern. Überprüfen Sie meinen Kommentar hier: Ändern Sie die Hintergrundfarbe des UITable-Abschnitts, ohne den Titel des Abschnitts zu verlieren
quelle
Wenn Sie dem tableView-Header nur einen Titel hinzufügen möchten, fügen Sie keine Ansicht hinzu. In Swift 3.x sieht der Code folgendermaßen aus:
Sie können ein Array implementieren, um den Titel für die Header abzurufen.
quelle
Zurück zur ursprünglichen Frage (4 Jahre später): Anstatt Ihren eigenen Abschnittsheader neu zu erstellen, kann iOS Sie einfach anrufen (mit willDisplayHeaderView: forSection :), direkt nachdem der Standard erstellt wurde. Zum Beispiel wollte ich eine Grafikschaltfläche am rechten Rand der Abschnittsüberschrift hinzufügen:
quelle
Verwenden Sie
tableView: willDisplayHeaderView:
diese Option, um die Ansicht anzupassen, wenn sie angezeigt werden soll.Dies gibt Ihnen den Vorteil, dass Sie die bereits für die Header-Ansicht erstellte Ansicht übernehmen und erweitern können, anstatt die gesamte Header-Ansicht selbst neu erstellen zu müssen.
Hier ist ein Beispiel, das den Header-Abschnitt basierend auf einem BOOL einfärbt und dem Header ein Detailtextelement hinzufügt.
quelle
Swift 4.2
In Swift 4.2 wurde der Name der Tabelle etwas geändert.
quelle