web-dev-qa-db-fra.com

Comment ajouter une barre de navigation à un UITableViewController dans Interface Builder?

Le constructeur d'interface ne me laisse pas cliquer et faire glisser une barre de navigation sur un contrôleur de vue de tableau !!! C'est super frustrant.

Tout ce que je veux, c'est un tableau avec un bouton d'édition (réalisé dans le constructeur d'interface). Si ce n'est pas possible, comment puis-je ajouter une barre de navigation par programmation?

Merci d'avance.

39
klyngbaek

Dans la vue d'ensemble, assurez-vous que votre Contrôleur de vue de table est sélectionné.

Ensuite, allez dans le menu Editor , puis cliquez sur le sous-menu Embed In , puis choisissez Navigation Controller et le tour est joué. Votre contrôleur de navigation pointe sur votre contrôleur tableview avec une relation intégrée.

48
Greeso

Pour une vue de table avec un bouton d'édition en haut, utilisez un UINavigationController, avec une UITableView comme rootView. Cela signifie que vous allez créer une sous-classe UITableView personnalisée pour votre vue Table et l'utiliser comme la vue racine de votre instance UINavigationController. (Par programme, il est défini avec -(id)initWithRootViewController de UINavigationController. Il est également réglable via IB.)

Ensuite, dans votre sous-classe UITableView, décommentez la ligne suivante:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

et voilà, la vue de votre UINavigationController s’affiche sous forme de tableau avec un bouton d’édition sur le côté droit de la barre de navigation.

Comme le contrôleur se trouve en haut de la pile, il n'y a pas de bouton "retour" à gauche, vous pouvez donc utiliser self.navigationItem.leftBarButtonItem pour le UIBarButtonItem que vous créez.

17
stephenhow

Je conviens qu'il est difficile de comprendre comment procéder dans Interface Builder, mais il est heureusement possible d'ajouter un élément de barre de navigation et de bouton de barre à une vue tableau de cette façon. Voici comment le faire:

  1. Faites glisser une vue vierge (une instance de UIView) de la bibliothèque vers la zone située en haut de la vue Tableau. Lorsque vous faites glisser le curseur près de la zone cible, Interface Builder la surligne en bleu pour vous indiquer où déposer la vue. Lâchez-vous et la vue sera ajoutée en tant que sous-vue de la vue en-tête de la vue tableau.
  2. Faites glisser une barre de navigation de la bibliothèque et déposez-la dans la vue vierge que vous venez d'ajouter.
  3. Faites glisser un élément de bouton de barre de la bibliothèque et déposez-le sur la barre de navigation.

MODIFIER

Le problème avec l'approche ci-dessus est que, comme le fait remarquer Bogatyr, la barre de navigation défilera avec la vue Table. Apple recommande d'utiliser une sous-classe personnalisée de UIViewController possédant à la fois la barre de navigation et une instance de UITableView redimensionnée pour s'adapter. Malheureusement, cela signifie que vous devrez implémenter vous-même le comportement UITableViewController requis par votre sous-classe UIViewController.

Une autre approche qui semble bien fonctionner consiste à créer une sous-classe personnalisée de UIViewController qui possède une vue d'arrière-plan vide contenant la barre de navigation ainsi qu'une vue de contenu vierge (une instance de UIView) s'insérant sous la barre de navigation. Votre sous-classe personnalisée aurait un point de vente pointant vers une instance de UITableViewController dans le même fichier nib.

Cela présente l'avantage de permettre à tous les composants de vue d'être créés et configurés dans Interface Builder et ne nécessite pas la mise en oeuvre de méthodes UITableViewController à partir de zéro. Le seul détail à prendre en compte dans le parent du contrôleur de vue de la table serait d'ajouter la vue du tableau en tant que sous-vue de la vue du contenu du parent dans viewDidLoad.

Le parent peut implémenter les méthodes d'action pour les éléments de bouton de la barre de navigation et implémenter le modèle de délégué si nécessaire.

12
jlehr

À partir de iOS6, vous pouvez utiliser la vue conteneur. Donc, ce que vous devez faire est de prendre View controller, ajoutez-y la barre de navigation, puis ajoutez une vue conteneur au même contrôleur. Cela ajoutera automatiquement le nouveau lien de contrôleur de vue à la vue de votre conteneur. Maintenant, supprimez simplement cela et votre contrôleur de vue de table dans le story-board. Maintenant, intégrez le contrôleur de vue de table à la vue de conteneur en faisant glisser le contrôle. J'espère que ça aide.

9
cocoaNoob

Ajoutez d’abord un contrôleur de navigation et placez le contrôleur de vue de table (en tant que contrôleur de vue racine) sur le contrôleur de navigation. Voici comment cela est fait dans Code car je n'utilise pas IB.

4
dasdom

Pourquoi, dans le monde, vous ne pouvez pas faire glisser un élément NavigationItem dans un fichier .xib dont le propriétaire est défini sur une sous-classe de UIViewController et relier l'objet de navigationItem à la sortie navigationItem d'UIViewController me dépasse Cela ressemble à un véritable trou dans l'intégration IB/XCode. Parce que vous pouvez certainement faire glisser une instance de ViewController vers un fichier xib, faire glisser un élément de navigationItem dans ViewController, puis définir le titre et les éléments de barre de boutons de cette façon.

Par conséquent, si vous souhaitez définir la barre de navigation de votre objet de sous-classe UITableViewController dans IB, vous devez créer votre objet TableVC dans un fichier xib (et non le fichier .xib contenant la vue de table pour votre UITableViewController!). Vous pouvez alors connecter l'objet TableVC pour qu'il devienne la sortie d'un autre objet (comme votre délégué d'application), ce qui fonctionne si vous n'avez besoin que d'une instance de votre TVC pendant la durée de vie de votre application ou si vous souhaitez créer dynamiquement des instances de votre Dans le code TableVC, vous chargez ce fichier .xib supplémentaire manuellement via la méthode loadNibNamed: owner: options de la classe NSBundle.

3
Bogatyr

Ces étapes ont fonctionné pour moi sous iOS 9:

  1. Ajouter un contrôleur de vue au storyboard. Définissez UITableViewController en tant que classe de base.
  2. Ajoutez un objet de barre de navigation sur le contrôleur de vue en haut.
  3. Ajouter une vue sous la barre de navigation.
  4. Ajouter une cellule de vue tableau à la vue tableau.
  5. Ajouter des contraintes.
1
hansengj

C'est l'autre facile moyen;

  1. Choisissez votre écran TableViewController sur le storyboard.
  2. Cliquez sur Inspecteur de taille symbole dans le menu de droite et recherchez Taille simulée
  3. Changement corrigé vers Forme libre

Vous pouvez facilement ajouter une barre de navigation.

0
Ahmet Şentürk