xcode / storyboard: Die Leistenschaltfläche kann nicht in die Symbolleiste oben gezogen werden

99

Ich habe einen Ansichts-Controller, der die Detailansicht einer Tabelle ist. Wenn Sie auf die Zeile der Tabelle klicken, gelangen Sie zur Detailansicht. Die Detailansicht ist in einen Navigationscontroller eingebettet, sodass sich oben links in der Navigationsleiste eine Schaltfläche befindet, die Sie zurück zur Tabelle führt. So weit, ist es gut.

Ich möchte jetzt eine Bearbeitungsschaltfläche auf der rechten Seite der Navigationsleiste hinzufügen, damit Sie die Detailansicht bearbeiten können. Mein Plan ist, dass dadurch modal ein weiterer Ansichts-Controller hinzugefügt wird, mit dem Sie die Details des Elements bearbeiten können. Standard Zeug.

Wenn ich jedoch versuche, ein Balkenschaltflächenelement aus der Liste der Objekte in die Navigationsleiste zu ziehen, dauert es nicht. Wenn ich stattdessen die Maustaste loslasse, bleibt die Leistenschaltfläche auf dem Registerkartenleisten-Controller unten. (Mein Navigationsschema enthält verschiedene Registerkarten und für jede Registerkarte eine Tabelle, eine Detailansicht usw.)

Jeder, der zuvor darauf gestoßen ist, kann vorschlagen, was ich falsch mache, oder eine Art Problemumgehung, um das Balkenschaltflächenelement auf der rechten Seite des Navigationsbildschirms hinzuzufügen. Muss ich es im Code hinzufügen?

Vielen Dank für alle Vorschläge.

user1904273
quelle
Überprüfen Sie das folgende Tutorial brianflove.com/2012/10/01/…
casillas
Ich konnte die Schaltfläche mit self.navigationItem.rightBarButtonItem = self.editButtonItem hinzufügen. und neue Bearbeitung im Storyboard erstellt, bin mir jedoch nicht sicher, wie ich Segue erstellen soll. Im Storyboard ist dies nicht möglich, da die Schaltfläche "Bearbeiten" nicht sichtbar ist. Ich denke, sie muss im Code enthalten sein. wird versuchen, Preparesegue?
user1904273
Wenn eine der Antworten Ihnen geholfen hat, sollten Sie sie akzeptieren :)

Antworten:

157

Ich habe das gleiche Problem mit Xcode6 und habe festgestellt, dass UINavigationItem automatisch für den ersten ViewController hinzugefügt wird, den Sie in NavigationController einbetten. Für die nachfolgenden ViewController müssen Sie es jedoch wie folgt manuell hinzufügen:

  1. In der Objektbibliothek findet Navigation Artikel ziehen Sie dann zu Ihrem zweiten Viewcontroller im Storyboard.
  2. Suchen Sie in der Objektbibliothek das Balkenschaltflächenelement und ziehen Sie es auf das Navigationselement, das Sie im vorherigen Schritt erstellt haben.

Jetzt haben Sie Ihre Bar-Tasten oben in Ihrer Szene.

Update Die Lösung funktioniert immer noch mit XCode 7, aber ich wollte ein aussagekräftigeres Foto hinzufügen. Nur für den Fall, dass jemand mit den oben genannten Standard- oder technischen Namen nicht wirklich vertraut ist. Beachten Sie die roten Pfeile rechts, die sich auf die oben genannten Schritte 1 und 2 beziehen. Beachten Sie auch die Hierarchie der Ansichten im linken roten Rechteck. Geben Sie hier die Bildbeschreibung ein

Wael Showair
quelle
2
Ja, das hat es für mich getan. Ich denke, dies ist die richtige Antwort. XCode scheint das Navigationselement nicht zu nachfolgenden ViewControllern hinzuzufügen.
Jeremy Chone
Dies ist korrekt, aber der rote Pfeil im Bild sollte vom Balkenschaltflächenelement in der Objektbibliothek bis zum linken roten Feld reichen.
Malhal
Sie können es in der Leinwand ablegen sowie durch den roten Pfeil anzeigen oder wie vorgeschlagen in der Dokumentkontur ablegen. Es macht keinen Unterschied
Wael Showair
Ich bin froh, dass ich diese Antwort gefunden habe, weil sie großartig funktioniert. Ich bin nur verblüfft, warum das UINavigationItem nicht bereits im Storyboard vorhanden ist. Es ist offensichtlich zur Laufzeit vorhanden, da der Code self.navigationItem.rightBarButtonItem = ...funktioniert. Ich vermute, der UINavigationController auf der ersten VC instanziiert ihn für alle nachfolgenden VCs, die auf den Stapel geschoben werden. Wenn Sie jedoch eines manuell dorthin ziehen, warum landen dann nicht zwei UINavigationItems übereinander? Die, die Sie manuell gezogen haben, und die, die bereits vom UINavigationController vorhanden ist?
James Toomey
70

Böser Trick:

  1. Ändern Sie Ihre Segue, um zu pushen.
  2. Stellen Sie den gewünschten Inhalt ein
  3. Zurücksetzen, um zu zeigen

Dann kann der Inhalt bearbeitet werden und Sie haben einen nicht veralteten Stil für den Übergang.

Baxter Lopez
quelle
Mann, so hässlich. Dies funktioniert jedoch UIBarButtonItemauf einem View Controller in Xcode 7.3 .
Mikeho
OMG, es funktioniert immer noch in XCode 8.2.1. Wann wird es behoben? Niemals, wahrscheinlich
Dima Rostopira
Dies ist der einzige Weg, den ich gefunden habe, ohne ihn per Code hinzuzufügen.
Joshua
Oh Gott ... Danke (y)
Nasir Khan
Ich kann nicht glauben, dass dieser Fehler nach mehr als 2 Jahren immer noch hier ist
Carioni
33

Dem View Controller Ihres Storyboards fehlt wahrscheinlich a Navigation Item. Sie können eine aus der Objektbibliothek ziehen und auf Ihrem Ansichts-Controller ablegen.

Sie können dann Elemente der Balkentasten auf die linke oder rechte Seite der Navigationsleiste ziehen und dort ablegen.


quelle
1
Das hat funktioniert, aber ich habe das Gefühl, dass dies früher automatisch gemacht wurde, solange Sie einen Push-Übergang zu einem Controller hatten
aryaxt
Dies sollte die richtige Antwort sein. Der Rest scheint mir Hack
MK Yung
23

Ich habe es gelöst. Ziehen Sie 'Navigationselement' in Ihre Detailansicht. als Sie in der Leiste ziehen können.

Jamal N. Ahmad
quelle
8

Anstatt einen UINavigationController in das Storyboard zu ziehen und zu versuchen, UIBarButtonItems hinzuzufügen, habe ich einen UITableViewController hineingezogen und bin dann zu gegangen

Editor-> Einbetten-> Navigations-Controller

Dies ergab das gleiche Ergebnis wie zuvor, außer dass ich UIBarButtonItems ohne Probleme zu beiden Seiten der Navigationsleiste hinzufügen konnte.

tallen11
quelle
Du solltest hoch gehen !!
Vin
5

Es ist eigentlich ein Xcode-Problem. Ein Trick, der bei mir funktioniert hat, ist das Hinzufügen der Balkenschaltfläche in der VIEW FILE STRUCTURE auf der linken Seite. Hoffe es hilft dir. :)

Chetan Kumar
quelle
Das funktioniert! Ich denke, dies ist die Lösung, solange Apple den Fehler mit Xcode 8.2
Arjun Kalidas
5

Ich denke, es ist ein Fehler. Ich hatte das gleiche Problem. Ich habe dieses Problem behoben, indem ich die Größenklassen deaktiviert und dann aktiviert habe.

Sie können die Größenklassen im Interface Builder-Dokument deaktivieren und aktivieren.

Geben Sie hier die Bildbeschreibung ein

Hongyang
quelle
4

Ich hatte auch dieses Problem, schließen und wieder öffnen das Projekt für mich gearbeitet.

Hsm
quelle
3

Ich glaube, es ist eine XCode-Eigenart. Ich hatte das gleiche Problem. Ich musste Xcode zurücksetzen und die Platzierung der Dinge auf dem Storyboard verschieben, um es endlich zum Laufen zu bringen. Es funktioniert jetzt.

Rotationsmanschette
quelle
3

Ich denke, das ist ein Fehler von Xcode. Ändern Sie seguein Xcode 8 das In-Storyboard vor dem Ansichts-Controller der Registerkartenleiste in alle Optionen ( show detail, present...). Dann zurück zu show. Versuchen Sie, Balkenschaltflächenelemente zu ziehen und die Kachel zu ändern. Für mich geht das!

user2174595
quelle
1

Haben Sie versucht, Ihr Projekt zu "reinigen"? Ich weiß, das hilft mir manchmal (gehen Sie einfach zu "Produkt"> "Reinigen"). Alternativ können Sie die Navigationsleiste löschen und erneut versuchen.

Wenn Sie glauben, dass es sich um einen Programmierfehler handelt, können Sie Ihren Code gerne weitergeben. Ich würde gerne helfen, so gut ich kann. :) :)

JJ Yu
quelle
1

Sie müssen die xCode-IDE zurücksetzen. Schließen Sie xCode und schreiben Sie die folgenden Codes an das Terminal ... Es wird funktionieren.

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
quelle
1

Gleicher Fehler. Ich hatte einen Table View Controller in einem Navigations-Controller und viele ViewController, die weiter unten in der Kette folgten. Für den FIRST-Root-View-Controller wurde automatisch ein 'Navigationselement' erstellt, und ich konnte diesem problemlos ein 'Balkenschaltflächenelement' hinzufügen. Über das Storyboard ziehen und ablegen. Aber das ist alles. Auf dem folgenden Table View Controller und weiteren View Controllern konnte ich im Storyboard niemals ein Balkenschaltflächenelement hinzufügen, obwohl sie sich innerhalb des ursprünglichen Navigationscontrollers befanden (automatisch generierte Zurück-Schaltfläche wurde angezeigt).

Die Lösung von Wael Showair hat bei mir nicht funktioniert. Balkenschaltflächenelemente werden nicht angezeigt.

Ich habe es am Ende programmatisch gelöst (Swift 2.0):

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

Kein zusätzliches Navigationselement oder Balkenschaltflächenelement erforderlich.

Elliott Davies
quelle
1

Ich hatte auch das gleiche Problem. Ich konnte dieses Problem beheben, indem ich die Option "Root View Controller" auswählte und dann in der simulierten Matrix die Option "Obere Leiste" in "Undurchsichtige Navigationsleiste" änderte und das Element oben in der Navigationsleiste hinzufügen konnte Diese Antwort wird jemandem helfen.

reetu
quelle
1

Ich hatte das gleiche Problem in xcode 8. Ich musste einfach xcode schließen und das Projekt erneut öffnen, und dann konnte ich die Balkenschaltfläche ohne Probleme zum Root-Controller hinzufügen.

SGM
quelle
1

Für XCode 8

Hier gibt es viele Antworten. Ich habe einige davon ausprobiert, aber ich konnte es nicht schaffen. Also habe ich meine Lösung gefunden. Wählen Sie einfach Ihre aus ViewController, gehen Sie zum Abschnitt " Attributinspektor " und ändern Sie die obere Leiste in " Undurchsichtige Navigationsleiste und Boom". Sie sehen die Navigationsleiste auf Ihrem Storyboard. Sie können den Titel ändern oder ein Element hinzufügen. Wenn Sie Opaque nicht beibehalten möchten, können Sie den Stil in Inferred ändern .

Geben Sie hier die Bildbeschreibung ein

emresancaktar
quelle
1

In Xcode 10 habe ich gerade die Art der Übergabe geändert, die zu diesem neuen Ansichts-Controller führt, und zwar in "Push (veraltet)". Das Navigationselement wurde so hinzugefügt, wie es nach diesem Wechsel zulässig war. Wenn Sie zu Ihrem ursprünglich gewünschten Segue-Typ zurückkehren, bleibt das Navigationselement erhalten.

Mark Lyons
quelle
0

Anstatt das "Balkenschaltflächenelement" auf den "Navigations-Controller" zu ziehen, ziehen Sie es auf den "Detailansicht-Controller". Wenn Sie die Detailansicht in die "Navigationsansicht" einbetten, wird dem "Detailansicht-Controller" "Navigationselement" hinzugefügt. Wenn Sie das "Balkenschaltflächenelement" auf die rechte Seite des Navigationselements ziehen, wird das Element unter "Rechte Balkenschaltflächenelemente" angezeigt.

Nancy
quelle
0

Wie Mark Lyons sagte, habe ich die gleiche Lösung verwendet.

  • zuerst Push-Segue verwendet
  • Das Balkenelement wurde hinzugefügt
  • kehre zurück, um Segue zu zeigen
  • getan
A_Mo
quelle
0

In Xcode 11 können Sie eine Schaltfläche in die Navigationsleiste ziehen, um Ihre Leistenschaltfläche zu erstellen.

Sala
quelle