Je souhaite personnaliser l'en- UITableView
tête de chaque section. Jusqu'à présent, j'ai implémenté
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
cette UITabelViewDelegate
méthode. Ce que je veux faire, c'est obtenir l'en-tête actuel pour chaque section et simplement l'ajouter en UILabel
tant que sous-vue.
Jusqu'à présent, je ne suis pas en mesure d'accomplir cela. Parce que je n'ai rien trouvé pour obtenir l'en-tête de section par défaut. Première question, existe-t-il un moyen d'obtenir l'en-tête de section par défaut ?
Si ce n'est pas possible, je dois créer une vue de conteneur qui est un UIView
mais, cette fois je dois définir la couleur d'arrière-plan par défaut, la couleur de l'ombre, etc. Parce que, si vous regardez attentivement l'en-tête de la section, il est déjà personnalisé.
Comment puis-je obtenir ces valeurs par défaut pour chaque en-tête de section?
Merci à tous.
la source
tableView:titleForHeaderInSection:
?NSString
, j'ai besoin de définir une police personnalisée, je ne peux pas si j'utilisetableView:titleForHeaderInSection:
Réponses:
Vous pouvez essayer ceci:
la source
La réponse sélectionnée en utilisant
tableView :viewForHeaderInSection:
est correcte.Juste pour partager une astuce ici.
Si vous utilisez storyboard / xib, vous pouvez créer une autre cellule prototype et l'utiliser pour votre "cellule de section". Le code pour configurer l'en-tête est similaire à la façon dont vous configurez pour les cellules de ligne.
la source
viewForHeaderInSection
pascanEditRowAtIndexPath
comme vous l'avez mentionné. Je ne vérifie jamais le crash que vous avez dit, mais pourriez-vous nous dire combien une longue pression provoquera un crash?UITableViewCell
comme vue d'en-tête. Il vous sera très difficile de déboguer les problèmes visuels - l'en-tête disparaîtra parfois à cause de la façon dont les cellules sont retirées de la file d'attente et vous chercherez pendant des heures pourquoi jusqu'à ce que vous réalisiez qu'ilUITableViewCell
n'appartient pas à l'en-UITableView
tête.UITableViewCell
comme en-tête est tout simplement faux.La version rapide de la réponse de Lochana Tejas :
la source
override
mot-clé est redondant. De plus, envisagez de réutiliser les vues d'en-tête plutôt que de les recréer.Si vous utilisez la vue d'en-tête par défaut, vous ne pouvez modifier le texte avec
Pour Swift:
Si vous souhaitez personnaliser la vue, vous devez en créer une nouvelle vous-même.
la source
pourquoi ne pas utiliser UITableViewHeaderFooterView ?
la source
Si headerInSection n'est pas affiché, vous pouvez essayer ceci.
Cela renvoie une hauteur pour l'en-tête d'une section donnée.
la source
La version Swift 3 de Lochana et Estemendoza répond:
Sachez également que vous devez ÉGALEMENT mettre en œuvre:
la source
Essaye ça......
la source
Les autres réponses permettent de recréer la vue d'en-tête par défaut, mais ne répondent pas réellement à votre question principale:
Il existe un moyen - implémentez simplement
tableView:willDisplayHeaderView:forSection:
dans votre délégué. La vue d'en-tête par défaut sera transmise au deuxième paramètre, et à partir de là, vous pouvez laUITableViewHeaderFooterView
convertir en une , puis ajouter / modifier des sous-vues comme vous le souhaitez.Obj-C
Rapide
la source
view
.la source
C'est la solution la plus simple possible. Le code suivant peut être utilisé directement pour créer un en-tête de section personnalisé.
REMARQUE: SectionHeaderTableViewCell est un UITableViewCell personnalisé créé dans Storyboard.
la source
Si j'étais vous, je ferais une méthode qui retourne un UIView donné un NSString à contenir. Par exemple
Dans l'implémentation de cette méthode, créez un UIView, ajoutez-y un UILabel avec les propriétés que vous souhaitez définir et, bien sûr, définissez son titre sur celui donné.
la source
Solution de @ samwize dans Swift (alors votez pour lui!). Génial en utilisant le même mécanisme de recyclage également pour les sections d'en-tête / pied de page:
la source
Si vous voulez changer la police du textLabel dans votre en-tête de section, vous voulez le faire dans willDisplayHeaderView. Pour définir le texte, vous pouvez le faire dans viewForHeaderInSection ou titleForHeaderInSection. Bonne chance!
la source
Exemple 2019 complet à copier et coller
Commencez par définir "Groupé" sur le storyboard: cela doit se produire au moment de l'initialisation, vous ne pouvez pas vraiment le définir plus tard, il est donc plus facile de se souvenir de le faire sur le storyboard:
Prochain,
Doit implémenter heightForHeaderInSection en raison d'un bogue Apple.
Il y a toujours un bogue Apple - depuis dix ans maintenant - où il n'affiche tout simplement pas le premier en-tête (c'est-à-dire l'index 0) si vous n'avez pas
heightForHeaderInSection
appel.Donc,
tableView.sectionHeaderHeight = 70
ça ne marche tout simplement pas, c'est cassé .Définir un cadre ne sert à rien:
Dans
viewForHeaderInSection
créez simplement un UIView ().C'est inutile / n'apporte rien si vous UIView (frame ...) car iOS définit simplement la taille de la vue comme déterminé par le tableau.
Donc, la première ligne de
viewForHeaderInSection
sera simplementlet view = UIView()
et c'est la vue que vous retournez.Voilà - tout le reste est une perte de temps.
Un autre problème Apple "pointilleux".
L'extension de commodité utilisée ci-dessus est:
la source
Ajoutez comme par magie un en-tête de vue de tableau dans Swift
Récemment, j'ai essayé cela.
J'avais besoin d'un et un seul en-tête dans tout UITableView.
Comme je voulais une UIImageView en haut de la TableView. J'ai donc ajouté un UIImageView au-dessus de UITableViewCell et il a été automatiquement ajouté en tant que tableViewHeader. Maintenant, je connecte ImageView au ViewController et j'ai ajouté l'image.
J'étais confus parce que j'ai fait quelque chose comme ça pour la première fois. Donc, pour effacer ma confusion, ouvrez le format xml du MainStoryBoard et constatez que la vue Image a été ajoutée en tant qu'en-tête.
Cela a fonctionné pour moi. Merci xCode et rapide.
la source
appeler cette méthode de délégué
cela donnera une chance d'ajouter automatiquement un en-tête par défaut avec un titre dynamique.
Vous pouvez utiliser un en-tête / pied de page réutilisable et personnalisable.
https://github.com/sourov2008/UITableViewCustomHeaderFooterSection
la source
swif 4.2
la source
outre titleForHeaderInSection, vous pouvez simplement changer la vue de l'en-tête, du pied de page. vérifiez mon commentaire ici: Changer la couleur d'arrière-plan de la section UITable sans perdre le titre de la section
la source
Si vous souhaitez simplement ajouter un titre à l'en-tête tableView, n'ajoutez pas de vue. Dans swift 3.x, le code ressemble à ceci:
Vous pouvez implémenter un tableau pour récupérer le titre des en-têtes.
la source
Pour revenir à la question d'origine (4 ans plus tard), plutôt que de reconstruire votre propre en-tête de section, iOS peut simplement vous appeler (avec willDisplayHeaderView: forSection :) juste après avoir construit celui par défaut. Par exemple, je voulais ajouter un bouton graphique sur le bord droit de l'en-tête de section:
la source
Permet
tableView: willDisplayHeaderView:
de personnaliser la vue lorsqu'elle est sur le point d'être affichée.Cela vous donne l'avantage de pouvoir prendre la vue déjà créée pour la vue d'en-tête et de l'étendre, au lieu d'avoir à recréer vous-même la vue d'en-tête entière.
Voici un exemple qui colore la section d'en-tête en fonction d'un BOOL et ajoute un élément de texte de détail à l'en-tête.
la source
Swift 4.2
Dans Swift 4.2, le nom de la table est un peu changé.
la source