Кнопка возврата к корневому представлению в UINavigationController

Итак, я создал UINavigationController вручную, установил его как rootViewController моего UIWindow, и я хотел бы использовать кнопку возврата, чтобы выйти из UINavigationController и загрузить на место другой viewController. Однако свойство backItem для UINavigationBar является readonly, поэтому я не знаю, как правильно его установить (он только для чтения и по умолчанию имеет значение nil в корневом навигационном представлении). Как я могу достичь этого (или аналогичного эффекта, я хочу, чтобы эффективно "выйти" с этого UINavigationController, нажав кнопку "Назад" в корневом представлении).

В качестве альтернативы, это плохая форма? Как я могу избежать корневого представления UINavigationController?

EDIT:

Попытка решения Legolas со следующим кодом: (некоторые имена были изменены)

UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:plvc]; // plvc being the first viewcontroller
MyAppDelegate* appDelegate = [Utility getAppDelegate];
appDelegate.window.rootViewController = navController;

UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithTitle:@"Start" style:UIBarButtonItemStyleBordered target:self action:@selector(initializeStuff)];
navController.navigationItem.leftBarButtonItem = backButton;
[navController.navigationItem setHidesBackButton:YES animated:YES];
[navController.view setNeedsDisplay];

Но кнопка не отображается. Что я делаю не так? Другие обратные кнопки отображаются правильно, но этого еще нет.

Ответ 1

Вы можете сделать это в другом подходе.

Перейдите к методу:

- (void)viewDidLoad

Скрыть кнопку "Назад" с помощью

[self.navigationItem setHidesBackButton:YES animated:YES];

Создайте новый UIButton или UIBarButtonItem и поместите его вместо кнопки "Назад".

Затем вы можете использовать действие, когда вы нажимаете кнопку

- (IBAction) clickBackButton : (id) sender; //and push view controller to your required view.

Обновление моего ответа: используйте это в методе viewDidLoad//работает как charm//

[self.navigationItem setHidesBackButton:YES animated:YES];
UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithTitle:@"Start" style:UIBarButtonItemStyleBordered target:self action:@selector(initializeStuff)];

self.navigationItem.leftBarButtonItem = backButton;

Ответ 2

Есть несколько подходов, о которых я могу думать.

  • Используйте свой собственный значок "Назад" для вашего собственного дизайна или по умолчанию для системы. Используйте leftBarButtonItem.
  • Сделайте изображение значка по умолчанию. Опять же, используйте leftBarButtonItem.
  • Сделайте фальшивый корневой вид, который вы вставляете в стек UINavigationController. Единственной целью этого корневого представления будет запуск вторичного представления или смерть, когда пользователь вернется к нему. Таким образом, вы никогда не увидите UINavigationController без кнопки "Назад". Я тестировал это (но не профилировал); влияние производительности кажется незначительным.

Кроме того, выйдите < https://discussions.apple.com/message/8298537#8298537 > с 2008 года. Тот же вопрос.

Проблема в том, как пользователь выходит из UINavigationController и обратно в приложение? Корневая панель навигации не имеет кнопки возврата или любого типа крюка для выхода.

Кому кто-то ответил:

Чтобы сделать то, что вы хотите сделать, трюк заключается в том, чтобы поместить контроллер супер-корня в контроллер навигации, но он установил для навигационного контроллера navarBarHidden свойство YES в viewWillAppear и NO в viewWillDisappear. (Для бонусных очков оживите его, когда это необходимо.)

Ответ 3

попробуйте: -

UIBarButtonItem *leftBarButton  = [[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStylePlain target:self action:@selector(initializeStuff)];
[self.navigationItem setleftBarButtonItem:leftBarButton];
[leftBarButton release];