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.
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.
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
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)
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
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.