Faire un tableauVoir seulement prendre une partie de l'écran

Par défaut, lorsque je fais glisser un TableViewController dans IB, la tableview occupe tout l'écran, et il n'y a aucun moyen d'append un UIView qui rest en place même si l'user fait défiler la tableview (Si je dis append un UIView avec quelques buttons, quand je fais défiler la tableview que UIView défilera aussi.)

Mon programme utilise une sous-class UITableViewController pour contrôler la tableview, quel est le moyen le plus facile d'avoir une barre supérieure qui rest statique même lorsque l'user défile?

Simple, au lieu d'utiliser un UITableViewController, utilisez simplement un UIViewController avec un UITableView placé à l'intérieur. (en laissant de la place pour que vous ajoutiez votre vue secondaire au-dessus ou en dessous de la table) Ainsi, vous pouvez laisser l'affichage du controller de vue occuper tout l'écran et définir manuellement le cadre de la vue de table. Il y aura un peu de réarrangement requirejs mais répondra à vos besoins.

entrez la description de l'image ici

Les seules différences réelles dont vous devez tenir count sont que vous devez rendre votre controller de vue conforme aux protocoles UITableViewDelegate et UITableViewDatasource, ainsi que déclarer vous-même la sortie de la vue de table.

@property (weak,nonatomic) IBOutlet UITableView *tableView; 

Il est également important de garder à l'esprit qu'il y a quelques fonctions qui sont seulement disponibles sur UITableViewController comme clearsSelectionOnViewWillAppear , mais vous pouvez toujours les répliquer vous-même.

 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.tableView deselectRowAtIndexPath:self.tableView.indexPathsForSelectedRows animated:YES]; } 

L'approche que je recommand (et je pense que c'est le model de design qu'encourage Apple) consiste à utiliser une séquence embeddede pour insert votre controller de vue de table dans un controller parent qui contient vos vues supplémentaires. Cela aide à garder les choses modulaires et aide à rendre la structure globale de l'application facile à comprendre.

Les étapes de base sont les suivantes:

  1. Créer un controller de vue parent dans IB et append une vue de conteneur
  2. Créez une séquence embeddede en effectuant un glisser-déplacer depuis la vue conteneur vers le controller de vue que vous souhaitez intégrer.
  3. Donnez à la segue un identifiant comme "EmbedMyTable".
  4. Dans la méthode prepareForSegue du controller parent, vérifiez l'identificateur de votre prepareForSegue embedded et effectuez tout câblage supplémentaire. Le controller de vue et les relations de vue sont établis automatiquement, mais vous pouvez configurer le controller de vue de table et conserver une reference à celui-ci.