Кнопка возврата к корневому представлению в 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];