UITableViewHeaderFooterView dans InterfaceBuilder
Je veux créer un en-tête personnalisé vue en section dans un document distinct .xib à l'aide de l'IB
Cependant IB je ne peux pas trouver un composant UITableViewHeaderFooterView (similaire à UITableViewCell) et attribuer une réutilisation pour elle
Donc comment créer dans la section d'en-tête personnalisé?
J'ai créer une classe MySection qui hérite de UITableViewHeaderFooterView
Créer un .xib, MySection.xib
Registre xib pour la cellule de réutilisation
le problème est, comment utiliser le initWitReuseIdentifier....
Vous devez vous connecter pour publier un commentaire.
Il est tout à fait possible et Apple fournit un exemple ici.
Télécharger l'exemple de code et de regarder la SectionHeaderView.xib.
La façon de le faire est de créer un xib avec un seul UIView sur elle. Ensuite, définissez le type de classe à une classe qui hérite de UITableViewHeaderFooterView.
Une fois que vous avez une plume avec une classe qui hérite de UITableViewHeaderFooterView, appelez le suivant pour vous inscrire à la classe pour les réutiliser comme un en-tête ou le pied de page:
Pour mettre la vue d'utiliser, de mettre en œuvre la table délégué de la méthode tableView:viewForHeaderInSection: comme:
UITableViewCell
s'affichage du contenu) et tous vos autres points de vue doivent être des sous-vues de dessus. Aussi en plus de @patr1ck du commentaire ci-dessus, il semble que dans iOS 10.x, vous devez définir les deuxtableView.sectionHeaderHeight
ettableView.estimatedSectionHeaderHeight
(même si vous remplacez les valeurs pour les différentes sections de votreUITableViewDelegate
.)contentView
d'unUITableViewHeaderFooterView
via Interface Builder?J'ai écrit un guide (testé sur iOS 9), qui sont composés de 4 étapes:
UITableViewHeaderFooterView
viewDidLoad
, appelregisterNib:forHeaderFooterViewReuseIdentifier:
pour l'affichage de la tableviewForHeaderInSection
et l'utilisationdequeueReusableHeaderFooterViewWithIdentifier
de récupérer l'en-tête/pied de pageSolutions de contournement suivantes me permettre de glisser attribuer IB éléments de code comme des variables. UITableViewHeaderFooterView ne pas permettre que la sortie de la boîte.
créer un (Nouveau Fichier/CocoaTouchClass) UITableViewHeaderFooterView
.h.m.xib normalement
temporairement renommer superclasse de UITableViewHeaderFooterView de UIView. Glisser affecter votre INTERFACE utilisateur éléments de code en fonction des besoins, de la dge, attribuer clé-valeur
correctement, revenir à UITableViewHeaderFooterView lorsque vous avez terminé.
Ses assez pour créer une vue et de céder sa classe IB (la réutilisation de l'identificateur n'a pas besoin d'être définie dans interface builder (comme par un UITableViewCell))
UITableViewHeaderFooterView documentation contient
registerNib:forHeaderFooterViewReuseIdentifier:
méthodeMais actuellement (Sep 4 '13) de la Bibliothèque d'Objets dans Interface Builder ne comprend pas une UITableViewHeaderFooterView.
Cela rend registerNib:forHeaderFooterViewReuseIdentifier: inutile, car il n'y a pas moyen de configurer les afficher correctement dans la plume.
C'est peut-être mieux d'essayer de réutiliser des cellules ...
créer une nouvelle vue dans xib
Charge de la plume et de définir comme footerview à tableview
UIView *headerview = [[[NSBundle mainBundle] loadNibNamed:@"ReguistrationHeaderView" propriétaire:auto options:nil] firstObject];
[auto.tableview setTableFooterView:headerview];
J'ai toujours utilisé UITableViewCell que les en-Têtes (ou les Pieds de page) pour mes tables pour être en mesure de les modifier directement dans la table de montage séquentiel.
Mon flux de travail :
La partie cruciale est de retour le contentView de la headerCell (pas le headerCell lui-même), sinon, vous allez lancer dans des comportements étranges lors de la lecture avec reloadRowsAt ou des fonctions similaires (disparition des en-têtes au plus).
C'est mon code :
Je n'ai jamais été confronté les problèmes à le faire (ou tout au moins à mes clients toujours payé moi).
Alors que toutes ces réponses de travail, ils n'ont pas l'adresse de l'original de la question de savoir comment définir la
reuseIdentifier
à l'aide de Interface Builder. Il est, en effet, possible avec l'aide de la "Défini par l'Utilisateur Runtime Attributs". Vous pouvez définir lareuseIdentifier
directement dans Interface Builder en utilisant un attribut:Cela permettra d'accomplir exactement la même chose que le natif
reuseIdentifier
champ dansUITableViewCell
Interface Builder attribut inspecteur.