navigationItem.backBarButtonItem не работает? Почему предыдущее меню все еще отображается как кнопка?
попытка настроить кнопку "Назад"в навигационном контроллере детализации.
на моем контроллере одного вида у меня есть добавить кнопка, где код программно генерирует новый UIViewController
:
- (void)add:(id)sender
{
MyAddViewController *addController = [[MyAddViewController alloc] initWithNibName:@"MyAddViewController" bundle:nil];
[self.navigationController pushViewController:addController animated:YES];
[addController release];
}
это работает, и когда я нажимаю кнопку "Добавить", он переходит в новое представление. Внутри viewDidLoad
метод MyAddViewController.m
Я:
self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];
но это не работает. Кнопка "Назад" в навигационном контроллере остается заголовок контроллера предыдущего представления в стеке. Кажется, что линия ничего не делает. Я что-то пропустил?
спасибо
5 ответов
Это будет работать только на каждом дочернем элементе после viewController, который имеет self.navigationItem.backBarButtonItem
.
self.navigationItem.backBarButtonItem
для кнопки "Назад", которая появляется на просмотр толкнул-представление-контроллер. Поэтому вам нужно переместить эту строку на предыдущий контроллер вида.
вы путаете backBarButtonItem
и leftBarButtonItem
. От UINavigationItem
docs on backBarButtonItem
:
когда этот деталь задний деталь панель навигации - когда она следующая пункт ниже верхнего пункта-это может быть представлен в виде кнопки "назад" на навигационная панель. Используйте это свойство для укажите кнопку Назад. Цель и действие элемента кнопки задней панели вы должны быть равны нулю. Неисполнение значение-отображение элемента кнопки bar этот название навигационного элемента.
Итак, если бы вы изменили:
self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];
в:
self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];
Я считаю, что вы получите желаемый эффект.
вы не можете заменить backBarButtonItem
, но вы можете использовать leftBarButtonItem
для переопределения. Но чтобы получить новую кнопку для выполнения работы так же, как кнопка назад, вам нужно установить цель и действие новой кнопки что-то вроде:
- (void)dismissMyView {
[self.navigationController popViewControllerAnimated:YES];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]
initWithTitle:@"Quit" style: UIBarButtonItemStyleBordered
target:self action:@selector(dismissMyView)];
}
Если ViewController a push ViewController B тем временем мы хотим установить заголовок кнопки задней панели, мы должны установить "self.navigationItem.backBarButtonItem = ..".если он был установлен в ViewController B, он не будет работать так, как мы хотим.