web-dev-qa-db-fra.com

Élément de bouton de barre non affiché dans la barre de navigation

Je travaille sur une application dans laquelle mon contrôleur de vue initial est intégré à un contrôleur de navigation et à un contrôleur de barre d'onglets. 

Dans mon application, j'ai 3 onglets différents, un onglet est la vue des paramètres. Ceci est une table avec 5 boutons. chaque bouton affiche le même contrôleur de vue lorsqu'il est touché. 

Lorsque je touche l'un des boutons, il me reste une barre de navigation verte Nice, mais mes boutons ne fonctionnent pas.

J'ai essayé de faire glisser un élément de navigation dans la vue de mon story-board, puis de placer un élément de bouton de barre dans celle-ci. Je peux voir le bouton dans mon story-board, mais il ne sera pas affiché dans mon application lorsque je l'exécute.

J'ai également ajouté le code suivant à viewDidLoad ():

let leftItem = UIBarButtonItem(title: "< Back", style: .Done, target: self, action: Selector("Save"))
let rightItem = UIBarButtonItem(title: "Save", style: .Plain, target: self, action: Selector("Save"))

//self.parentViewController?.navigationItem.leftBarButtonItem = leftItem // also doesn't work

navigationController?.navigationItem.leftBarButtonItem = leftItem
navigationController?.navigationItem.rightBarButtonItem = rightItem

Mais cela n'aura aucun effet.

J'ai vérifié si le correct UIViewController était affecté à ma vue dans le storyboard, si j'avais effectué plusieurs versions nettes (CMD + Maj + K) et plusieurs reconstructions (CMD + B).

Les images suivantes sont une capture d'écran d'une partie de mon storyboard et une capture d'écran de mon application lorsque les boutons n'apparaissent pas.

MODIFIER

Ajout d'une nouvelle capture d'écran sur les contrôles de la vue. Ceux-ci ne fonctionnent pas avec ou sans le code supplémentaire dans mon viewDidLoad.

 Screenshot of my Storyboard

 Screenshot of my app where the buttons should show up

 Screenshot of the the setup of the controls in my view

13
Jules

Supprimez votre premier contrôleur de navigation, en second lieu vous n’avez pas besoin de rajouter de bouton de retour, utilisez simplement Push segue, en troisième lieu, utilisez self.navigationItem.leftBarButtonItem (essayez de vous ajouter au début.) * La réponse originale était un commentaire.

5
Ersin Sezgin

Au lieu de 

navigationController?.navigationItem.leftBarButtonItem = leftItem

faire 

navigationItem.leftBarButtonItem = leftItem

Mise à jour Je vous suggère de les ajouter directement dans le storyboard à votre Viewcontroller

9
MarkHim

J'ai eu deux étapes: une via une séquence de storyboard et une autre de programmation. Le storyboard segue a montré les boutons comme prévu. La suite progammatique, cependant, a montré la vue sans les boutons.

Pour la séquence programmatique, j'utilisais:

present(theNewVC, animated: true)

Les boutons sont apparus et ont fonctionné correctement lorsque j'ai changé cela pour:

show(theNewVC, sender: self)

Selon la documentation, present(...) présente le contrôleur de vue sous forme modale. Apparemment, un contrôleur de vue modale ne reçoit pas les boutons de la barre de navigation. Je l'ai ensuite confirmé en changeant mon enchaînement de storyboard en Present Modally - et les boutons ont également disparu.

(Utilisation de Xcode 9, Swift 4)

2
leanne

J'ai aussi rencontré le même problème. 

Sous iOS 11, cela fonctionne bien, mais pour iOS 10 ou moins, UIBarButtonItems n'était pas affiché, ce qui l'a ajouté par programmation.

Veuillez assigner un cadre à UIBarButtonItem.

let button =  UIButton(type: .custom)
button.setImage(UIImage(named: "img_name"), for:.normal)
button.addTarget(self, action: #selector(btnAction), for: .touchUpInside)
button.frame = CGRect(x:0, y:0, width:32, height:32)
let barButton = UIBarButtonItem(customView: button)
self.navigationItem.rightBarButtonItem = barButton

1
iDev

Cela m'est arrivé récemment. Je faisais ce que Ersin a mentionné, mais en vain. Revenez un peu plus loin et découvris que c'était le coupable:

nav.pushViewController(notifications, animated: false) nav.pushViewController(interactionCreateOrEdit, animated: false)  

Je l'ai changé pour

nav.setViewControllers([notifications, interactionCreateOrEdit], animated: false)

et les UIBarButtonItems ont recommencé à apparaître.

0
Michael McKenna