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.
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.
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.
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:
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.
À 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.
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.
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.
Ces étapes ont fonctionné pour moi sous iOS 9:
C'est l'autre facile moyen;
Vous pouvez facilement ajouter une barre de navigation.