Comment mettre en Œuvre de Table Personnalisé Section Affichage des en-Têtes et Pieds de page de story-board
Sans l'aide d'un storyboard, on pourrait tout simplement faire glisser un UIView
sur la toile, étalez-la et puis le mettre en tableView:viewForHeaderInSection
ou tableView:viewForFooterInSection
délégué méthodes.
Comment pouvons-nous accomplir cela avec un scénario où l'on ne peut pas faire glisser une UIView sur la toile
Vous devez vous connecter pour publier un commentaire.
Je sais que cette question a été pour iOS 5, mais pour le bénéfice des futurs lecteurs, note que l'efficacité de iOS 6, nous pouvons maintenant utiliser
dequeueReusableHeaderFooterViewWithIdentifier
au lieu dedequeueReusableCellWithIdentifier
.Donc dans
viewDidLoad
, appelezregisterNib:forHeaderFooterViewReuseIdentifier:
ouregisterClass:forHeaderFooterViewReuseIdentifier:
. Puis dansviewForHeaderInSection
, appeltableView:dequeueReusableHeaderFooterViewWithIdentifier:
. Vous n'utilisez pas une cellule prototype avec cette API (il s'agit soit d'une PLUME-vue ou un créé par programmation de vue), mais c'est la nouvelle API pour retiré les en-têtes et pieds de page.dequeueReusableHeaderFooterViewWithIdentifier
et il pourrait être écrit à l'aide que ie au lieu d'utiliser les cellules normales, vous pouvez utiliser des cellules spécifiques pour les en-têtes et pieds de page?Il suffit d'utiliser un prototype de cellule en tant que votre section d'en-tête et /ou pied de page.
tableView:viewForHeaderInSection:
méthode ou latableView:viewForFooterInSection:
méthode[tableView dequeueReusableCellWithIdentifier:]
pour obtenir l'en-têtetableView:heightForHeaderInSection:
méthode.Edit: Comment faire pour modifier l'en-tête de titre (en commentaire à la question):
tableView:viewForHeaderInSection:
méthode d'obtenir le label en appelant le:AX ERROR: Could not find my mock parent, most likely I am stale.
pourquoi?- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
tableView:heightForHeaderInSection:
" -- goo.gl/weL7mOUITableViewCell
que votre en-tête. Notamment, le délégué des méthodes de traiter avec en-tête de vues (par exemple,-tableView:willDisplayHeaderView:forSection:
) jamais de feu, et vous ne pouvez pas récupérer la vue d'en-tête à l'aide de-[UITableView headerViewForSection:]
.viewForHeaderInSection
méthode (pas besoin d'ajouter de la coutume UIViews).dequeueReusableHeaderFooterViewWithIdentifier
est présenté, et est désormais préféré au cours de cette réponse. Mais en utilisant correctement maintenant faut plus de mesures. J'ai guide @ samwize.com/2015/11/06/....UITableViewCell
comme en-tête de la vue. Vous aurez très difficile de débogage de visual pépins - d'en-tête parfois de disparaître à cause de la façon dont les cellules sont retirés et vous serez à la recherche pendant des heures pourquoi est-ce que jusqu'à ce que vous vous rendez compteUITableViewCell
n'appartient pasUITableView
en-tête.Dans iOS 6.0 et au-dessus, les choses ont changé avec la nouvelle
dequeueReusableHeaderFooterViewWithIdentifier
API.J'ai écrit un guide (testé sur iOS 9), qui peuvent être résumés comme suit:
UITableViewHeaderFooterView
viewDidLoad
viewForHeaderInSection
et l'utilisationdequeueReusableHeaderFooterViewWithIdentifier
de récupérer l'en-tête/pied de pageJe l'ai eu à travailler dans iOS7 à l'aide d'un prototype de cellule dans la table de montage séquentiel. J'ai un bouton dans mon custom de la section d'en-tête de la vue qui déclenche une séquence qui est mis en place dans le storyboard.
Commencer avec Tieme de la solution
Comme pedro.points m, le problème avec ceci est que la récolte de la section d'en-tête des causes de la première cellule dans la section sélectionné.
Comme Paul Von points, c'est fixé par le retour de la cellule contentView au lieu de l'ensemble de la cellule.
Cependant, comme avec mention des points, un appui long sur ladite section en-tête du crash de l'application.
La solution est de supprimer toute gestureRecognizers de contentView.
Si vous n'êtes pas à l'aide de gestes dans votre en-tête de section de vues, ce petit hack semble l'avoir fait.
Si vous utilisez des story-boards, vous pouvez utiliser un prototype de cellule dans la tableview à la disposition de votre en-tête de la vue. Définir un identifiant unique et viewForHeaderInSection vous pouvez retirer la cellule avec cet ID et la convertir en une UIView.
Si vous avez besoin d'une mise en Œuvre rapide de cette suivez les instructions sur l'acceptés réponse et en vous UITableViewController implémenter les méthodes suivantes:
La solution je suis venu avec est fondamentalement la même solution avant l'introduction des story-boards.
Créer un nouveau, vide d'interface fichier de classe. Faites glisser une UIView sur la toile, la mise en page voulue.
Charge de la plume manuellement, céder à la appropriée de l'en-tête/pied de page de la section dans viewForHeaderInSection ou viewForFooterInSection délégué méthodes.
J'avais l'espoir que Apple a simplifié ce scénario avec les storyboards et gardé à la recherche d'une meilleure ou une solution plus simple. Par exemple, la coutume de la table des en-têtes et pieds de page sont simples à ajouter.
tableView:titleForHeaderInSection
, qui est un one-liner.Lorsque vous revenez de la cellule contentView vous aurez à 2 problèmes:
viewForHeaderInSection
appel, la création de nouvelles cellules)Solution:
Classe Wrapper pour la table d'en-tête\le pied de page.
C'est juste conteneur, hérité de
UITableViewHeaderFooterView
, qui détient de la cellule à l'intérieur dehttps://github.com/Magnat12/MGTableViewHeaderWrapperView.git
La classe de registre dans votre UITableView (par exemple, dans le viewDidLoad)
Dans votre UITableViewDelegate:
J'ai utilisé pour effectuer les opérations suivantes pour créer un en-tête/pied de page vues paresseusement:
[NSNull null]
J'ai été en difficulté au sein d'un scénario où l'en-Tête n'a jamais été réutilisé même en faisant toutes les étapes.
Donc comme une pointe remarque à tous ceux qui veulent arriver à la situation d'afficher des sections vides (0 lignes) être avertir que:
dequeueReusableHeaderFooterViewWithidentifier ne sera pas réutiliser l'en-tête jusqu'à ce que vous renvoyer au moins une ligne
Espère que cela aide
À suivre sur les Damon suggestion, voici comment j'ai fait l'en-tête sélectionnable comme une normale consécutive à une divulgation de l'indicateur.
J'ai ajouté un Bouton sous-classé de UIButton (sous le nom de "ButtonWithArgument") à l'en-tête du prototype de cellule et supprimé le titre du texte (gras "Title" le texte est un autre UILabel dans le prototype de la cellule)
puis réglez le Bouton à l'ensemble de la vue d'en-tête, et a ajouté une divulgation de l'indicateur avec Avario du truc
ButtonWithArgument.h
ButtonWithArgument.m
Vous devez utiliser Tieme de la solution comme une base mais oublier la
viewWithTag:
de poisson et d'autres approches, au lieu d'essayer de recharger votre en-tête (rechargement de cet article).Donc, après avoir siégé jusqu'à votre cellule personnalisé en-tête de la vue avec toute la fantaisie
AutoLayout
tout ça, juste retirer et de retourner le contentView après votre installation, comme:À propos d'une solution où l'en-tête est basée sur une vue de tableau :
Suivant dans la délégué :
Ici est @Vitaliy Gozhenko réponse, en Swift.
Pour résumer, vous allez créer un UITableViewHeaderFooterView qui contient un UITableViewCell. Cette UITableViewCell sera "dequeuable" et vous pouvez créer dans votre storyboard.
Créer un UITableViewHeaderFooterView classe
Branchez votre tableview avec cette classe dans votre viewDidLoad fonction:
Lors de la demande, pour un en-tête de section, dequeue un CustomHeaderFooterView, et d'insérer une cellule en elle
Ajouter cellule dans
StoryBoard
, et de définirreuseidentified
Code
et
Utilisation:
Similaire à laszlo répondre, mais vous pouvez réutiliser le même prototype de cellule pour les deux cellules du tableau et de la section d'en-tête de la cellule. Ajouter les deux premières fonctions ci-dessous pour votre sous-classe UIViewController