Ответ 1
Это будет работать только для каждого дочернего элемента после viewController с self.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];
Но это не работает. Кнопка "Назад" в контроллере навигации остается title предыдущего контроллера представления в стеке. Кажется, что линия ничего не делает. Я что-то пропустил?
Спасибо
Это будет работать только для каждого дочернего элемента после viewController с self.navigationItem.backBarButtonItem
.
self.navigationItem.backBarButtonItem
- для кнопки "Назад", которая появляется в представлении, наводимом контроллером представления. Поэтому вам нужно перенести эту строку на предыдущий контроллер представления.
Вы вводите в заблуждение backBarButtonItem
и leftBarButtonItem
. Из UINavigationItem
docs в backBarButtonItem
:
Когда этот элемент является обратным элементом панель навигации - когда это следующий элемент ниже верхнего элемента - это может быть представленный в качестве кнопки "Назад" на Панель навигации. Используйте это свойство для укажите кнопку "Назад". Цель и действие элемента кнопки задней панели вы устанавливаете должно быть nil. По умолчанию Значение - это отображение позиции панели заголовок пунктов навигации.
Итак, если вы должны были изменить:
self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];
To:
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 нажимает ViewController B, тем временем мы хотим установить титр кнопки на задней панели, мы должны установить "self.navigationItem.backBarButtonItem =..", если он был установлен в ViewController B, он не будет работать так, как мы хотим.