2015-11-13 41 views
10

Sto lavorando a un'app in cui il controller di visualizzazione iniziale è incorporato in un controller di navigazione e un controller della barra delle schede.Elemento del pulsante Barra non visualizzato nella barra di navigazione

Nella mia app ho 3 diverse schede, una scheda è la visualizzazione delle impostazioni. Questa è una vista tabella con 5 pulsanti. ogni pulsante mostrerà lo stesso controller di visualizzazione quando viene toccato.

Quando tocco uno dei pulsanti, ho ancora una bella barra di navigazione verde, ma i miei pulsanti non funzionano.

Ho provato a trascinare un oggetto di navigazione nella vista nello storyboard e quindi inserire un elemento del pulsante di barra al suo interno. Riesco a vedere il pulsante nel mio storyboard, ma non verrà visualizzato nella mia app quando lo eseguirò.

Ho anche aggiunto il seguente codice alla mia 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 

Ma non avrà alcun effetto.

Ho controllato se l'UIViewController corretto è stato assegnato alla mia vista nello storyboard, ho fatto parecchie Clean build (CMD + Shift + K) e Ricostruzioni (CMD + B).

Le immagini seguenti sono uno screenshot di una parte del mio storyboard e uno screenshot della mia app alla vista in cui i pulsanti non verranno visualizzati.

EDIT

Aggiunto un nuovo screenshot sui controlli nella visualizzazione. Questi non funzionano con o senza il codice aggiuntivo nel mio 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

+2

cancellare il tuo primo controller di navigazione, secondo non avete bisogno di aggiungere pulsante indietro basta usare segue spinta, terzo tentativo di utilizzare self.navigationItem.leftBarButtonItem (provate l'aggiunta di sé all'inizio .) –

+0

@ErsinSezgin Grazie! Il mio problema è risolto. Quando puoi inserire una risposta, la accetterò. – Jules

risposta

5

Elimina il tuo primo controller di navigazione, secondo non avete bisogno di aggiungere pulsante indietro basta usare segue spinta, terzo tentativo di utilizzare self.navigationItem.leftBarButtonItem (provo aggiungendo sé all'inizio). * La risposta originale era un commento.

7

Invece di

navigationController?.navigationItem.leftBarButtonItem = leftItem 

fare

navigationItem.leftBarButtonItem = leftItem 

Aggiornamento ti suggerisco di aggiungere direttamente nella storyboard al viewController

+0

Siamo spiacenti, ma questo non ha alcun effetto. – Jules

+0

aggiornato la mia risposta, non puoi aggiungerli tramite lo storyboard? Devi trascinare e rilasciare in una navigazioneItem prima – MarkHim

+0

No che non funziona. Ho aggiornato la mia domanda con uno screenshot dei controlli che ho aggiunto alla vista nel mio storyboard. – Jules

-1
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 40, 40)]; 

    [button setImage:[[UIImage imageNamed:@"BtnBack"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateNormal]; 
    [button.imageView setTintColor:[UIColor whiteColor]]; 
    [button addTarget:self action:@selector(buttonClicked:) 
    forControlEvents:UIControlEventTouchUpInside]; 
    UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] 
            initWithCustomView:button]; 
    self.navigationItem.leftBarButtonItem = buttonItem; 

questo codice Scrivi sul metodo ViewWillAppear.

0

Questo mi è successo di recente. Stavo facendo quello che Ersin ha menzionato, ma senza risultato.Marcia indietro un po 'di più e ha scoperto che questo era il colpevole:

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

ho cambiato in

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

ei UIBarButtonItems iniziato che appare di nuovo.

1

Ho avuto due folletti: uno tramite uno storyboard seguito e uno programmatico. Lo storyboard segue ha mostrato i pulsanti come previsto. Il seguito progammatico, tuttavia, ha mostrato la vista senza i pulsanti.

Per la segue programmatico, stavo usando:

present(theNewVC, animated: true) 

I pulsanti sono apparsi e hanno funzionato correttamente quando ho cambiato che a:

show(theNewVC, sender: self) 

Per la documentazione, present(...) presenta il controller della vista modale. Apparentemente un controller di visualizzazione modale non ottiene i pulsanti della barra di navigazione. Ho ulteriormente confermato questo cambiando il mio storyboard segue a Present Modally - e anche i pulsanti sono scomparsi.

(Usando Xcode 9, Swift 4)

Problemi correlati