Создание кнопки возврата для просмотра в корне в UINavigationController - PullRequest
11 голосов
/ 06 июня 2011

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

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

EDIT:

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

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];

Но кнопка не отображается. Что я делаю неправильно? Другие кнопки «Назад» отображаются правильно, но эта кнопка по-прежнему отсутствует.

Ответы [ 3 ]

16 голосов
/ 06 июня 2011

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

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

- (void)viewDidLoad

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

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

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

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

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

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

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

self.navigationItem.leftBarButtonItem = backButton;
3 голосов
/ 07 июня 2011

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

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

Кроме того, ознакомьтесь с <<a href="https://disussions.apple.com/message/8298537#8298537" rel="nofollow">https://discussions.apple.com/message/8298537#8298537> от 2008 года. Тот же вопрос.

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

На что кто-то ответил:

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

0 голосов
/ 06 июня 2011

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

UIBarButtonItem *leftBarButton  = [[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStylePlain target:self action:@selector(initializeStuff)];
[self.navigationItem setleftBarButtonItem:leftBarButton];
[leftBarButton release];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...