xcode / storyboard: impossible de faire glisser le bouton de la barre vers la barre d'outils en haut

99

J'ai un contrôleur de vue qui est la vue détaillée d'une table. Lorsque vous cliquez sur la ligne du tableau, cela vous amène à la vue détaillée. La vue détaillée est intégrée dans un contrôleur de navigation de sorte qu'un bouton en haut à gauche de la barre de navigation vous renvoie à la table. Jusqu'ici tout va bien.

Je souhaite maintenant ajouter un bouton d'édition sur le côté droit de la barre de navigation afin que vous puissiez modifier la vue détaillée. Mon plan est que cela ajoutera un autre contrôleur de vue de manière modale qui vous permettra de modifier les détails de l'élément. Trucs standard.

Cependant, lorsque j'essaie de faire glisser un élément de bouton de barre de la liste d'objets vers la barre de navigation, cela ne prend pas. Au lieu de cela, lorsque je relâche le bouton de la souris, il laisse le bouton de la barre sur le contrôleur de la barre d'onglets en bas. (Mon schéma de navigation comprend différents onglets et pour chaque onglet un tableau, une vue détaillée, etc.)

Tout le monde a déjà rencontré ce problème et peut suggérer ce que je fais de mal ou une sorte de solution de contournement pour ajouter l'élément de bouton de barre sur le côté droit de l'écran de navigation. Dois-je l'ajouter dans le code?

Merci pour vos suggestions.

user1904273
la source
Consultez le tutoriel suivant brianflove.com/2012/10/01/…
casillas
J'ai pu ajouter le bouton en utilisant self.navigationItem.rightBarButtonItem = self.editButtonItem; et a créé un nouvel editvc dans le storyboard, mais je ne sais pas comment créer un segue. Impossible de le faire dans le storyboard car le bouton d'édition n'est pas visible, donc je suppose qu'il doit être dans le code. va essayer prepareforsegue?
user1904273
Si l'une des réponses vous a aidé, vous devriez l'accepter :)

Réponses:

157

J'ai le même problème en utilisant Xcode6 et j'ai remarqué que UINavigationItem est ajouté automatiquement pour le premier ViewController que vous intégrez dans NavigationController mais pour les ViewControllers suivants, vous devrez l'ajouter manuellement comme suit:

  1. Dans la bibliothèque d'objets, recherchez l' élément de navigation, puis faites-le glisser vers votre 2ème ViewController dans le storyboard.
  2. Dans la bibliothèque d'objets, recherchez élément de bouton de barre, puis faites-le glisser l'élément de navigation que vous avez créé à l'étape précédente.

Maintenant, vous aurez vos boutons de barre collés en haut de votre scène.

Mise à jour La solution fonctionne toujours avec XCode 7 mais je voulais ajouter une photo plus descriptive. Juste au cas où quelqu'un ne serait pas vraiment familier avec les noms standards ou techniques mentionnés ci-dessus. Remarquez les flèches rouges à droite, elles font référence à l'étape 1, étape 2 mentionnée ci-dessus. Notez également la hiérarchie des vues sur le rectangle rouge gauche. entrez la description de l'image ici

Wael Showair
la source
2
Oui, ça l'a fait pour moi. Je pense que c'est la bonne réponse, XCode ne semble pas ajouter l'élément de navigation aux ViewControllers suivants.
Jeremy Chone
c'est correct, mais la flèche rouge dans l'image doit aller de l'élément de bouton de barre dans la bibliothèque d'objets jusqu'à la boîte rouge gauche.
malhal
Vous pouvez le déposer dans le canevas ainsi qu'indiqué par la flèche rouge ou vous pouvez le déposer dans le contour du document comme vous l'avez suggéré. Ça ne fait pas de différence
Wael Showair
Heureux comme diable j'ai trouvé cette réponse car cela fonctionne très bien - je suis juste perplexe pourquoi le UINavigationItem n'est pas déjà là sur le Storyboard? C'est évidemment là au moment de l'exécution, car le code self.navigationItem.rightBarButtonItem = ...fonctionnera. Je suppose que le UINavigationController sur le premier VC l'instancie pour tous les VC suivants poussés sur la pile. Cependant, en faisant glisser manuellement un là-dessus, pourquoi ne vous retrouvez-vous pas avec 2 UINavigationItems l'un sur l'autre? Celui que vous avez fait glisser manuellement et celui déjà là depuis UINavigationController?
James Toomey
70

Nasty truc:

  1. Changez votre segue pour pousser.
  2. Définissez le contenu dont vous avez besoin
  3. Revenir pour montrer

Ensuite, le contenu sera modifiable et vous aurez un style non obsolète pour segue.

Baxter Lopez
la source
Homme, si moche. Mais cela fonctionne pour UIBarButtonItemun contrôleur de vue dans Xcode 7.3 .
mikeho
OMG, il fonctionne toujours dans XCode 8.2.1. Quand sera-t-il réparé? Jamais, probablement
Dima Rostopira
C'est le seul moyen que j'ai trouvé sans l'ajouter par code.
Joshua
Oh god ... Merci (y)
Nasir Khan
Je ne peux pas croire que ce bug soit toujours là après plus de 2 ans
Carioni
33

Le contrôleur de vue de votre storyboard manque probablement un fichier Navigation Item. Vous pouvez en faire glisser un depuis la bibliothèque d'objets et le déposer sur votre contrôleur de vue.

Vous pourrez ensuite faire glisser et déposer les éléments des boutons de la barre sur le côté gauche ou droit de la barre de navigation.


la source
1
cela a fonctionné, mais j'ai l'impression que cela se faisait automatiquement tant que vous aviez un push segue vers un contrôleur
aryaxt
Cela devrait être la bonne réponse. Le reste me semble pirater
MK Yung
23

Je l'ai résolu. faites glisser «Élément de navigation» dans votre vue détaillée. que vous pouvez faire glisser dans l'élément de bouton de barre.

Jamal N. Ahmad
la source
8

La façon dont j'ai résolu ce problème était, au lieu de faire glisser un UINavigationController dans le Storyboard et d'essayer d'ajouter UIBarButtonItems à cela, j'ai fait glisser un UITableViewController puis je suis allé à

Éditeur-> Intégrer dans-> Contrôleur de navigation

Ce qui a donné le même résultat qu'avant, sauf que je pourrais ajouter UIBarButtonItems des deux côtés de la barre de navigation sans aucun problème.

tallen11
la source
Tu devrais monter !!
Vin
5

C'est en fait un problème de xcode. Une astuce qui a fonctionné pour moi est d'ajouter le bouton de la barre dans la STRUCTURE DU FICHIER VUE SUR LA GAUCHE. J'espère que cela vous aidera. :)

Chetan Kumar
la source
Cela marche! Je suppose que c'est la solution tant qu'Apple corrige le bogue avec Xcode 8.2
Arjun Kalidas
5

Je pense que c'est un bug. J'ai eu le même problème, j'ai résolu ce problème en désactivant les classes de taille, puis en l'activant.

Vous pouvez désactiver et activer les classes de taille dans le document Interface builder.

entrez la description de l'image ici

Hongyang
la source
4

J'ai également eu ce problème, fermer et rouvrir le projet a fonctionné pour moi.

Hsm
la source
3

Je crois que c'est une bizarrerie XCode. J'ai eu le même problème. J'ai dû réinitialiser Xcode et changer le placement des choses sur le storyboard pour enfin le faire fonctionner. Ça marche maintenant.

brassard rotatif
la source
3

Je pense que c'est un bug de Xcode. Dans Xcode 8, changez le seguedans le storyboard avant le contrôleur de vue de la barre d'onglets pour toutes ses options ( show detail, present...). Puis revenons à show. Essayez de faire glisser les éléments des boutons de la barre et de modifier la vignette. Ça marche pour moi!

user2174595
la source
1

Avez-vous essayé de «nettoyer» votre projet? Je sais que cela m'aide parfois (allez simplement dans "Produit"> "Nettoyer"). Sinon, supprimez la barre de navigation et réessayez.

Si vous pensez que c'est une erreur de programmation, n'hésitez pas à transmettre votre code. Je serais heureux de vous aider de toutes les manières possibles. :)

JJ Yu
la source
1

Vous devez réinitialiser xCode IDE. Fermez xCode et écrivez les codes ci-dessous sur le terminal ... Cela fonctionnera.

rm -rf $HOME/Library/Application Support/Developer/Shared/Xcode
rm -rf $HOME/Library/Preferences/com.apple.dt.Xcode.*
rm -rf $HOME/Library/Saved\ Application\ State/com.apple.dt.Xcode.savedState
rm -rf $HOME/Library/Developer/Xcode
Yusuf Kıldan
la source
1

Même problème. J'avais un contrôleur de vue de table à l'intérieur d'un contrôleur de navigation et de nombreux ViewControllers qui suivaient plus bas dans la chaîne. Un «élément de navigation» était créé automatiquement pour le premier contrôleur de vue racine et je pourrais ajouter un «élément de bouton de barre» à ceci sans problème. Via le Storyboard, faites glisser et déposez. Mais c'est tout. Sur le contrôleur de vue de table suivant et d'autres contrôleurs de vue, même s'ils se trouvaient dans le contrôleur de navigation initial (le bouton de retour généré automatiquement est apparu), le storyboard ne me laissait jamais ajouter un élément de bouton de barre.

La solution de Wael Showair n'a pas fonctionné pour moi. Les éléments du bouton de la barre n'apparaissent pas.

Je l'ai résolu par programme à la fin (Swift 2.0):

var testButton = UIBarButtonItem(title: "Test Button", style .Plain, target: self, action: "testButtonMethod")
self.tabBarController?.navigationItem.rightBarButtonItem = testButton

Aucun élément de navigation supplémentaire ou élément de bouton de barre nécessaire.

Elliott Davies
la source
1

J'étais trop confronté au même problème.J'ai pu résoudre ce problème en sélectionnant l'option du contrôleur de vue racine, puis dans la matrice simulée, j'ai changé l'option de la barre supérieure en Barre de navigation opaque et j'ai pu ajouter l'élément en haut de la barre de navigation. cette réponse aidera quelqu'un.

reetu
la source
1

J'ai eu le même problème dans xcode 8. J'ai dû simplement fermer xcode et rouvrir le projet, puis j'ai pu ajouter le bouton de la barre au contrôleur racine sans aucun problème.

SGM
la source
1

Pour XCode 8

Il y a de nombreuses réponses ici. J'ai essayé certains d'entre eux mais je n'ai pas pu y arriver. J'ai donc trouvé ma solution, sélectionnez simplement votre ViewController, allez dans la section Inspecteur d'attributs et changez la barre supérieure en Barre de navigation opaque et flèche. Vous verrez la barre de navigation sur votre storyboard. Vous pouvez changer le titre ou ajouter un élément. Si vous ne souhaitez pas conserver Opaque, vous pouvez changer le style en Inféré .

entrez la description de l'image ici

emresancaktar
la source
1

Dans Xcode 10, je viens de changer le type de segue allant à ce nouveau contrôleur de vue en `` Push (obsolète) '', j'ai ajouté l'élément de navigation car il était autorisé après avoir effectué ce changement. Si vous revenez au type de segment souhaité à l'origine, l'élément de navigation restera.

Mark Lyons
la source
0

Au lieu de faire glisser l '«élément du bouton de barre» vers le «contrôleur de navigation», faites-le glisser vers le «contrôleur de vue détaillée». Lorsque vous intégrez la vue détaillée dans la "Vue de navigation", "Élément de navigation" sera ajouté au "Contrôleur de vue détaillée". Si vous faites glisser l '"élément du bouton de la barre" vers le côté droit de l'élément de navigation, l'élément sera inclus sous les "éléments du bouton de la barre de droite"

Nancy
la source
0

comme Mark Lyons l'a dit, j'ai utilisé la même solution.

  • utilisé push segue en premier
  • a ajouté l'élément de bar
  • revenir en arrière pour montrer la séquence
  • terminé
A_Mo
la source
0

Dans Xcode 11, vous pouvez faire glisser un bouton vers la barre de navigation pour créer votre bouton de barre.

Sala
la source