2010-08-06 12 views
6

Mam problem polegający na tym, że mogę pomyślnie wypchnąć nowy kontroler widoku z kontrolera widoku głównego (przy użyciu aplikacji opartej na nawigacji przy użyciu szablonu Core Data), ale w widoku szczegółowym, który jest oddzielnym plikiem Xib z kontrolera widoku głównego, nie wyświetla przycisku wstecznej nawigacji. Jestem pewien, że zrobiłem wszystkie właściwe połączenia w IB, a wszystko inne działa zgodnie z oczekiwaniami.Przycisk nawigacji wstecz nie jest wyświetlany w kontrolce Pushed View

RootViewController.h

@class ItemsViewController; 

@interface RootViewController : UITableViewController <NSFetchedResultsControllerDelegate> { 

IBOutlet ItemsViewController *itemsVC; 

} 

@property (nonatomic, retain) IBOutlet ItemsViewController *itemsVC; 

@end 

RootViewController.m

#import "ItemsViewController.h" 

@synthesize itemsVC; 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
// Pushes to ItemsViewController 

ItemsViewController *itemsViewController = [[ItemsViewController alloc] initWithNibName:@"ItemsViewController" bundle:[NSBundle mainBundle]]; 

[self.navigationController pushViewController:itemsViewController animated:YES]; 
[itemsViewController release]; 

} 

ItemsViewController jest podklasą UITableViewController z własnym XIb, również o nazwie ItemsViewController. Ponownie, jest on wypychany z RootViewController, ale przycisk powrotu nie pojawia się like this. Miałem wrażenie, że była to "bezpłatna" funkcja korzystania z kontrolera nawigacyjnego. Jak można się spodziewać, jest to bardzo frustrująca blokada drogi i byłbym wdzięczny za każdą pomoc.

+0

Miałem ten sam problem, dopóki nie zobaczyłem tego postu. To naprawdę dziwne zachowanie domyślne. Dlaczego nie po prostu "Powrót", jeśli nie podano tytułu? –

+0

Tak, albo jakiś błąd lub ostrzeżenie w Xcode byłoby miłe. –

Odpowiedz

14

Czy Twoja klasa ItemsViewController ustawiła swoją właściwość title w metodzie ?

Powinieneś zadzwonić pod numer [tableView deselectRowAtIndexPath:indexPath animated:YES] jako ostatnia linia tableView:didSelectRowAtIndexPath:, aby zachować zgodność z wytycznymi interfejsu ludzkiego Apple.

+0

Nie ustawiłem jeszcze tytułu. Będzie pochodzić z własności nazwy CD, która wchodzi z RVC. Czy tytuł musi być ustawiony, aby pojawił się przycisk Wstecz? –

+1

Prawda. Ale zawsze powinien mieć tytuł na pasku nawigacji. Co powiesz na to: czy ustawiasz 'title' w metodzie' viewDidLoad' programu RootViewController? Wcześniej miałem problemy z przyciskiem Wstecz, gdy tytuł widoku głównego nie został ustawiony. –

+1

Przepraszam, kiedy wybieram swoją twarz z biurka.Ustawienie tytułu w RVC dało mi przycisk Wstecz. Sądzę, że musi zostać wypełniona zanim się powie. Dzięki za wskazówkę, nie zapomnę tego w najbliższym czasie! –

9

Tak, upewnij się, że masz tytuł na swoim RootViewController, jeśli nie pojawi się żaden przycisk. Aby programowo ustawić tytuł;

self.navigationItem.title = @"Hello Der"; 
1

Niektóre dodatkowo informacji dla przyszłych czytelników: Wpadłem na ten problem podczas próby ponownego zapełniania hierarchię nav na obciążenia aplikacji, więc dzwoni setViewControllers: od aplikacji App delegata: didFinishLaunchingWithOptions: metody. I pojawił się ten sam problem, gdy przycisk powrotu nie pojawił się.

W moim przypadku ustawienie tytułu elementu nawigacyjnego kontrolera widoku głównego w viewDidLoad nie działało, prawdopodobnie dlatego, że inne widoki ładowały się jako pierwsze i widziały tytuł root jako null. Zamiast tego ustawiłem tytuł elementu nawigacyjnego kontrolera widoku głównego w mojej aplikacji: didFinishLaunchingWithOptions: metoda tuż przed wywołaniem setViewControllers :, i to naprawiło.

0

Spróbuj użyć następującego fragmentu. To działa dla mnie!

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"Image.png"] forBarMetrics:UIBarMetricsDefault]; 

[self.navigationController.navigationBar bringSubviewToFront:[self.navigationController.navigationItem backBarButtonItem]]; 
0

Może się to również zdarzyć, gdy jesteś postrzelony i błędnie zainicjujesz widok jako modalny, zamiast przesuwać widok do kontrolera nawigacji.

oops: [self presentModalViewController: navController animated: YES]; znaczy: [self.navigationController pushViewController: controller animated: YES];

Powiązane problemy