12

Przepraszam Jestem nowy w programowaniu dla iphone.Nawigacja Pozycja nie pojawia się na sterowniku widoku

Utworzyłem aplikację Iphone z Master-Detail (do którego dołączono kontroler nawigacji). Przenoszę do nowego kontrolera widoku utworzonego przez UIBarButtonItem na masterviewcontroller. Jednak w przeciwieństwie do detailviewcontroller (który przyszedł z projektem) nie mogę sprawić, że navigationitem (lub pasek nawigacyjny?) Wyświetli się w widoku, mimo że pojawi się na liście scen mojego storyboardu.

Herezje jakiś kod i zrzut ekranu:

W moim masterviewcontroller.m viewDidLoad funkcja()

UIBarButtonItem *settingsButton = [[UIBarButtonItem alloc] initWithTitle:@"Settings" style:normal target:self action:@selector(goToSettings:)]; 
self.navigationItem.leftBarButtonItem = settingsButton; 

w moim masterviewcontroller.m

- (IBAction)goToSettings:(id)sender{  
    [self performSegueWithIdentifier:@"SettingsSegue" sender:self]; 
} 

Próbowałem dodając tytuł do navigationitem podczas funkcji viewDoLoad nowej viewcontroller.m klasy i utworzonej (wspomniane w tym Link, ale to nie zadziałało)

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    self.navigationItem.title = @"Settings"; 
    self.navigationItem.leftBarButtonItem = self.editButtonItem; 
} 

Ale to wciąż pojawia się w moim ujęć (pokazuje się na liście pod sceną, ale nie na ekranie widoku)

Więc moje pytanie brzmi, dlaczego jest teraz wyświetlane i jak dostaję to? Chcę przycisk powrotu, taki jak mój kontroler widoku szczegółów, który został dołączony do projektu głównego szczegółu.

EDIT # 1

Dodałem czek na czy kontroler nawigacyjny jest zerowa i nie jest zerowe (if nie jest wpisany) Próbowałem również zmienić pozycję nawigację do tyłu i usuwania i żaden nie pracował .

if(self.navigationItem == nil) 
{ 
    [ self.navigationItem init]; 
} 
self.navigationItem.title = @"Settings"; 
self.navigationItem.leftBarButtonItem = self.navigationItem.backBarButtonItem; 

teraz, że mam wystarczająco dużo reputacji, aby pokazać obraz mogę pokazać, że element nawigacji pojawia się na liście, ale nie robi pojawi się na widoku

enter image description here

+0

if tutaj nigdy nie jest wprowadzono, ponieważ dokumenty mówią, że self.navigationItem jest tworzony w locie. –

Odpowiedz

12

Element nawigacji nie pojawiają się z powodu „stylu” mojego segue.

Przejście, które przesunęło scenę z głównego kontrolera widoku do kontrolera widoku ustawień, zostało ustawione na "modalne". Musi być ustawiony na "push".Odbywa się to z ujęć na okienku narzędzia

1

upewnieniu się, że Twój kontroler nawigacyjny wymieniony w metodzie viewDidLoad nie jest zerowy?

Zakładając, że poprawnie wykonasz numer self.navigationItem, który nie jest zerowy, wygląda na to, że nieprawidłowo ustawiłeś swój self.navigationItem.leftBarButtonItem na editButtonItem, zamiast tego spróbuj usunąć to wszystko razem!

Jeśli usunięcie go nie rozwiązuje problemu: try

self.navigationItem.leftBarButtonItem = self.navigationItem.backBarButtonItem; 
6

Musisz zmienić swój styl Segue w ten sposób:

  • Wybierz Segue w serii ujęć;
  • Przejdź do Inspektora atrybutów (w zakładkach po prawej stronie);
  • Zmień atrybut stylu na Push.

Spowoduje to przesunięcie ekranu z prawej na lewą, a pasek nawigacji pojawi się przesuwany. W trybie modalnym ekran jest wyświetlany od dołu do góry ekranu i nie pozwala wyświetlić paska nawigacji.

0

Proszę sprawdzić, czy kontroler widoku jest głównym kontrolerem widoku kontrolera nawigacyjnego. Nie można bezpośrednio przedstawić kontrolera widoku jako kontrolera widoku modalnego. Musisz ustawić kontroler widoku jako kontroler widoku głównego kontrolera nawigacyjnego, a następnie przedstawić kontroler nawigacyjny jako kontroler widoku modalnego.

// Create the root view controller for the navigation controller 
// The new view controller configures a Cancel and Done button for the 
// navigation bar. 
YourViewController *addController = [[YourViewController alloc] 
        init]; 

// Configure the YourViewController. 

// Create the navigation controller and present it. 
UINavigationController *navigationController = [[UINavigationController alloc] 
         initWithRootViewController:addController]; 
[self presentViewController:navigationController animated:YES completion: nil]; 
4

Problem w moim przypadku było to, że kontroler nawigacyjny nie był "Widok początkowy Controller"

Więc musiałem to zrobić

enter image description here

Powiązane problemy