xcode / storyboard: non è possibile trascinare il pulsante della barra sulla barra degli strumenti in alto


99

Ho un controller di visualizzazione che è la visualizzazione dei dettagli di una tabella. Quando si fa clic sulla riga della tabella, si accede alla visualizzazione dei dettagli. La visualizzazione dei dettagli è incorporata in un controller di navigazione in modo che sia presente un pulsante in alto a sinistra della barra di navigazione che ti rimanda alla tabella. Fin qui tutto bene.

Ora voglio aggiungere un pulsante di modifica sul lato destro della barra di navigazione in modo da poter modificare la visualizzazione dei dettagli. Il mio piano è che questo aggiungerà un altro controller di visualizzazione in modo modale che ti consente di modificare i dettagli dell'articolo. Roba standard.

Tuttavia, quando provo a trascinare un elemento del pulsante della barra dall'elenco di oggetti alla barra di navigazione, non ci vorrà. Invece, quando lascio andare il pulsante del mouse, lascia il pulsante della barra sul controller della barra delle schede in basso. (Il mio schema di navigazione include diverse schede e per ciascuna scheda una tabella, una vista dettagliata, ecc.)

Qualcuno lo ha incontrato prima e può suggerire cosa sto facendo di sbagliato o una sorta di soluzione alternativa per aggiungere l'elemento del pulsante della barra sul lato destro della schermata di navigazione. Devo aggiungerlo nel codice?

Grazie per eventuali suggerimenti.


Controlla il seguente tutorial brianflove.com/2012/10/01/…
casillas

Sono stato in grado di aggiungere il pulsante utilizzando self.navigationItem.rightBarButtonItem = self.editButtonItem; e ha creato un nuovo editvc nello storyboard, tuttavia non sono sicuro di come creare segue. Non posso farlo nello storyboard perché il pulsante di modifica non è visibile, quindi immagino che debba essere nel codice. proverò a preparareforsegue?
user1904273

Se una delle risposte ti ha aiutato, dovresti accettarla :)

Risposte:


157

Ho lo stesso problema usando Xcode6 e ho notato che UINavigationItem viene aggiunto automaticamente per il primo ViewController che incorpori in NavigationController ma per i successivi ViewController, dovrai aggiungerlo manualmente come segue:

  1. Nella libreria degli oggetti, trova l' elemento di navigazione quindi trascinalo sul tuo secondo ViewController nello storyboard.
  2. Nella libreria degli oggetti, trova l' elemento del pulsante della barra quindi trascinalo sull'elemento di navigazione che hai creato nel passaggio precedente.

Ora avrai i tuoi pulsanti a barra bloccati in cima alla scena.

Aggiorna La soluzione funziona ancora con XCode 7 ma volevo aggiungere una foto più descrittiva. Nel caso in cui qualcuno non abbia realmente familiarità con i nomi standard o tecnici sopra menzionati. Notare le frecce rosse a destra, si riferiscono al passaggio 1, passaggio 2 di cui sopra. Notare anche la gerarchia delle viste sul rettangolo rosso sinistro. inserisci qui la descrizione dell'immagine


2
Sì, è stato così per me. Penso che questa sia la risposta corretta, XCode non sembra aggiungere l'elemento di navigazione ai successivi ViewController.
Jeremy Chone

questo è corretto, ma la freccia rossa nell'immagine dovrebbe andare dall'elemento del pulsante della barra nella libreria degli oggetti fino al riquadro rosso sinistro.
malhal

Puoi rilasciarlo nell'area di disegno così come indicato dalla freccia rossa oppure puoi rilasciarlo nella struttura del documento come suggerito. Non fa differenza
Wael Showair

Sono contento di aver trovato questa risposta perché funziona alla grande - Sono solo sconcertato perché l'UINavigationItem non è già presente nello Storyboard? Ovviamente è presente in fase di esecuzione, perché il codice self.navigationItem.rightBarButtonItem = ...funzionerà. Immagino che l'UINavigationController sul primo VC lo installi per tutti i successivi VC inseriti nello stack. Tuttavia, trascinandone manualmente uno lì, perché non ti ritroverai con 2 UINavigationItem uno sopra l'altro? Quello che hai trascinato manualmente e quello già lì da UINavigationController?
James Toomey

70

Brutto trucco:

  1. Cambia il tuo segue in push.
  2. Imposta il contenuto di cui hai bisogno
  3. Torna a mostrare

Quindi il contenuto sarà modificabile e avrai uno stile non deprecato per Segue.


Amico, così brutto. Ma questo funziona UIBarButtonItemsu un controller di visualizzazione in Xcode 7.3 .
mikeho

OMG, funziona ancora in XCode 8.2.1. Quando verrà risolto? Mai, probabilmente
Dima Rostopira

Questo è l'unico modo che ho trovato senza aggiungerlo tramite codice.
Joshua

Oh dio ... Grazie (y)
Nasir Khan

Non posso credere che questo bug sia ancora qui dopo più di 2 anni
Carioni

33

È probabile che nel controller della visualizzazione dello storyboard manchi un file Navigation Item. È possibile trascinarne uno dalla libreria degli oggetti e rilasciarlo sul controller della vista.

Sarai quindi in grado di trascinare e rilasciare gli elementi dei pulsanti della barra sul lato sinistro o destro della barra di navigazione.


1
ha funzionato, ma mi sento come se questo fosse fatto automaticamente fintanto che avevi un push segue a un controller
aryaxt

Questa dovrebbe essere la risposta corretta. Il resto mi sembra un trucco
MK Yung

23

L'ho risolto. trascina in "Elemento di navigazione" nella visualizzazione dei dettagli. di quanto puoi trascinare nell'elemento pulsante della barra.


8

Il modo in cui ho risolto questo problema è stato, invece di trascinare un UINavigationController nello Storyboard e provare ad aggiungere UIBarButtonItems a quello, ho trascinato un UITableViewController e poi sono andato a

Editor-> Incorpora in-> Controller di navigazione

Che ha dato lo stesso risultato di prima, tranne per il fatto che potevo aggiungere UIBarButtonItems su entrambi i lati della barra di navigazione senza problemi.


Dovresti salire !!
Vin

5

In realtà è un problema con xcode. Un trucco che ha funzionato per me è stato aggiungere il pulsante della barra nella STRUTTURA DEL FILE DI VISUALIZZAZIONE A SINISTRA, aggiungendo direttamente la vista. Spero che ti aiuti. :)


Funziona! Immagino che questa sia la soluzione fintanto che Apple risolve il bug con Xcode 8.2
Arjun Kalidas

5

Penso che sia un bug. Ho avuto lo stesso problema Ho risolto questo problema disabilitando le classi di dimensione, quindi abilitandolo.

È possibile disabilitare e abilitare le classi di dimensioni nel documento Interface builder.

inserisci qui la descrizione dell'immagine


4

Ho avuto anche questo problema, chiudere e riaprire il progetto ha funzionato per me.


3

Credo che sia una stranezza XCode. Ho avuto lo stesso problema. Ho dovuto resettare Xcode e spostare la posizione delle cose sullo storyboard per farlo funzionare finalmente. Sta lavorando adesso.


3

Penso che questo sia un bug di Xcode. In Xcode 8, modifica lo seguestoryboard prima del controller della visualizzazione della barra delle schede in tutte le sue opzioni ( show detail, present...). Quindi torna a show. Prova a trascinare gli elementi del pulsante della barra e modificare il riquadro. Per me funziona!


1

Hai provato a "pulire" il tuo progetto? So che a volte mi aiuta (vai su "Prodotto"> "Pulisci"). Oppure, in alternativa, elimina la barra di navigazione e riprova.

Se pensi che sia un errore di programmazione, sentiti libero di trasmettere il tuo codice. Sarei felice di aiutarti in ogni modo possibile. :)


1

È necessario ripristinare xCode IDE. Chiudi xCode e scrivi i seguenti codici sul terminale ... Funzionerà.

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

1

Stesso problema. Avevo un controller di visualizzazione tabella all'interno di un controller di navigazione e molti ViewController che seguivano più in basso nella catena. Un "elemento di navigazione" veniva creato automaticamente per il PRIMO controller di visualizzazione principale e potevo aggiungere un "elemento pulsante a barra" a questo senza problemi. Tramite lo Storyboard, trascina e rilascia. Ma questo è tutto. Sul seguente controller di visualizzazione tabella e su altri controller di visualizzazione, anche se erano all'interno del controller di navigazione iniziale (appariva il pulsante Indietro generato automaticamente), lo storyboard non mi consentiva di aggiungere un elemento pulsante a barra.

La soluzione di Wael Showair non ha funzionato per me. Gli elementi del pulsante della barra non apparivano.

Alla fine l'ho risolto in modo programmatico (Swift 2.0):

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

Non è necessario alcun elemento di navigazione o elemento pulsante barra aggiuntivo.


1

Anch'io stavo affrontando lo stesso problema Sono stato in grado di risolvere questo problema selezionando l'opzione del controller di visualizzazione principale e quindi nella matrice simulata ho modificato l'opzione della barra superiore in Barra di navigazione opaca e sono stato in grado di aggiungere l'elemento in cima alla barra di navigazione. questa risposta aiuterà qualcuno.


1

Ho avuto lo stesso problema in xcode 8. Ho dovuto semplicemente chiudere xcode e riaprire il progetto e quindi sono stato in grado di aggiungere il pulsante a barre al controller di root senza problemi.


1

Per XCode 8

Ci sono molte risposte qui. Ne ho provati alcuni ma non ci sono riuscito. Quindi ho trovato la mia soluzione, seleziona il tuo ViewController, vai alla sezione Ispettore attributi e cambia la barra superiore in Barra di navigazione opaca e Boom. Vedrai la barra di navigazione sul tuo storyboard. Puoi cambiare il titolo o aggiungere qualche elemento. Se non vuoi mantenere Opaque puoi cambiare lo stile in Inferred .

inserisci qui la descrizione dell'immagine


1

In Xcode 10, ho appena cambiato il tipo di segue andando a questo nuovo controller di visualizzazione in 'Push (deprecated)', aggiunto l'elemento di navigazione come consentito dopo aver effettuato questo passaggio. Se torni al tipo segue originariamente desiderato, l'elemento di navigazione rimarrà.


0

Invece di trascinare l '"elemento pulsante della barra" sul "controller di navigazione", trascinalo sul "controller visualizzazione dettagli". Quando si incorpora la visualizzazione dei dettagli nella "Visualizzazione di navigazione", "Elemento di navigazione" verrà aggiunto al "Controller della visualizzazione dei dettagli". Se trascini l '"Elemento del pulsante della barra" sul lato destro dell'elemento di navigazione, l'elemento verrà incluso negli "Elementi del pulsante della barra destra"


0

come ha detto Mark Lyons, ho usato la stessa soluzione.

  • usato push segue prima
  • ha aggiunto l'elemento bar
  • torna indietro per mostrare segue
  • fatto

0

In Xcode 11, puoi trascinare un pulsante sulla barra di navigazione per creare il pulsante della barra.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.