Кнопка «Назад» не отображается на UINavigationController - PullRequest
5 голосов
/ 21 февраля 2011

У меня есть настройка UINavigationController в моем AppDelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {          
    // Add the navigation controller's view to the window and display.
    [self.window addSubview:navigationController.view];
    [self.window makeKeyAndVisible];

    return YES;
}

В моем RootViewController я помещаю другое представление в стек:

//Show the deals
    DealViewController *dvc = [[DealViewController alloc] initWithNibName:@"DealViewController" bundle:nil];
    [self.navigationController.navigationBar setHidden:NO];
    [self.navigationController pushViewController:dvc animated:YES];

Вид отображается, но на моей панели навигации нет кнопки «Назад». Почему это так и как я могу это решить?

Ответы [ 5 ]

24 голосов
/ 21 февраля 2011

Вы устанавливаете self.title в RootViewController? Возможно, у UINavigationController нет текста для надписи «назад», поэтому он его опускает ...?

Вы устанавливаете hidesBackButton = YES или backBarButtonItem = nil в DealViewController, или для него определено другое значение leftBarButtonItem?

4 голосов
/ 19 июля 2012

Попробуйте это:

DetailViewController *detailViewController = [[DetailViewController alloc] init];
UIBarButtonItem *back = [[UIBarButtonItem alloc] initWithTitle : @"Back"
                                                         style : UIBarButtonItemStyleDone
                                                        target : nil
                                                        action : nil];
self.navigationItem.backBarButtonItem = back;
[self.navigationController pushViewController : detailViewController animated : YES];
[detailViewController release];
3 голосов
/ 21 июня 2012

Использование presentModalViewController для отображения контроллера naviagtion.Установите кнопку панели navagitionController следующим образом:

[navigationController.navigationBar.topItem setLeftBarButtonItem:
    [[[UIBarButtonItem alloc] initWithTitle: @"Back" 
                                      style: UIBarButtonItemStylePlain
                                     target: self
                                     action: @selector(dismisstheModal:)] autorelease]];
3 голосов
/ 21 февраля 2011

Вы должны думать о контроллере навигации как о стеке контроллеров навигации, каждый из которых управляет одним экраном, полным информации.Вы создаете экземпляр контроллера навигации с помощью метода

-(id)initWithRootViewController:(UIViewController *)rootViewController

.Вы указываете корневой контроллер представления в этом вызове.Затем вы добавляете представление контроллера навигации как подпредставление в окно, как вы делали раньше.

Если вы хотите показать второй экран, вы помещаете другой контроллер представления в стек, используя

-(void)pushViewController:detailViewController animated:YES

способ.

1 голос
/ 27 января 2017

Это произошло со мной, потому что в контроллере контента моего контроллера навигации я настроил некоторое поведение контроллера навигации в viewDidLoad и в другом классе, который наследуется от моего контроллера контента, и тот, который был представлен, я реализовал viewDidLoad и забыл позвонить [super viewDidLoad], что заставило меня переопределить базовый класс viewDidLoad, где я настраивал кнопки контроллера навигации.Oooops.

...