IOS >> Элемент UINavigation Back Button Название не изменяется

Я пытаюсь установить кнопку BACK для нажатого VC, установленного в стек UINavigationController. Я использую следующий код, и он не работает - я все еще получаю предыдущее имя VC, которое появляется как заголовок кнопки.

-(void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];

    self.title = @"VC Title";

    UIBarButtonItem* myBackButton = [[UIBarButtonItem alloc]
                                     initWithTitle:@"Back"
                                     style:UIBarButtonItemStyleBordered
                                     target:nil
                                     action:nil];

    self.navigationItem.backBarButtonItem = myBackButton;

}

Кто-нибудь?

Ответ 1

Попробуйте установить заголовок в родительском контроллере представления viewDidLoad

UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(popView)];

self.navigationItem.leftBarButtonItem = customBarItem;

Ответ 2

в контроллере родительского представления:

- (void)viewWillDisappear:(BOOL)animated
{
    self.title = @"Back";
}

- (void)viewWillAppear:(BOOL)animated
{
    self.title = @"Title of your navigation bar";
}

Сделает трюк

Ответ 3

Из документации Apple:

Элемент панели на левой стороне навигационной панели позволяет вернуться к предыдущему контроллеру представления в стеке навигации. Контроллер навигации обновляет левую часть панели навигации следующим образом:

Если новый контроллер верхнего уровня имеет пользовательский элемент кнопки на панели слева, отображается этот элемент. Чтобы указать пользовательский элемент кнопки "Левая панель", установите для свойства leftBarButtonItem элемента навигации диспетчера представлений.

Если на контроллере верхнего уровня нет пользовательского элемента левой кнопки, но элемент навигации предыдущего контроллера представления имеет действительный элемент в свойстве backBarButtonItem, на панели навигации отображается этот элемент.

Если элемент настраиваемого элемента панели не указан ни одним из контроллеров представления, используется кнопка возврата по умолчанию, и ее заголовок устанавливается на значение свойства title предыдущего контроллера представления, то есть контроллер представления один на уровне стека. (Если в стеке навигации имеется только один контроллер вида, кнопка возврата не отображается.)

Надеюсь, что это поможет.

Ответ 4

self.navigationItem.hidesBackButton = YES;
self.navigationItem.leftBarButtonItem =[[UIBarButtonItem alloc] initWithTitle:@"Put Any Title"
                                      style:UIBarButtonItemStyleBordered
                                     target:nil
                                     action:nil];

Ответ 6

Еще одно решение, которое очень быстро.

Переопределите этот метод в вашем контроллере базового представления, и у вас будет кнопка возврата на каждом нажатом контроллере. (Просто не добавляйте [super setTitle:title])

- (void)setTitle:(NSString *)title
{
    UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 44)];
    [lbl setText:title];
    [lbl setTextColor:[UIColor whiteColor]];
    [self.navigationItem setTitleView:lbl];
}

Ответ 7

для раскадровки;

нажмите на элемент навигации предыдущего контроллера. затем щелкните на инспекторе атрибутов на правой панели, затем напишите "" или что-нибудь еще в области подкладки. это сообщит диспетчеру просмотра, что показывать, когда в следующем (дочернем) контроллере просмотра. надеюсь, что это поможет

для решения кода;

UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithTitle:@"back off" style:UIBarButtonItemStyleBordered target:self action:@selector(popView)];
[[self navigationItem] setBackBarButtonItem:customBarItem];

Ответ 8

Вы можете использовать это (в viewController, который показывает кнопку возврата)

UINavigationController *nvc = self.navigationController;
NSInteger currentViewControllerIndex = [nvc.viewControllers indexOfObject:self];

if (currentViewControllerIndex > 0) {
    UIViewController *previousViewController = self.navigationController.viewControllers[currentViewControllerIndex - 1];
    previousViewController.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:backButtonTitle style:UIBarButtonItemStylePlain target:nil action:nil];
}

В быстром

if let currentViewControllerIndex = self.navigationController?.viewControllers.indexOf(self) where currentViewControllerIndex > 0,
    let previousViewController = self.navigationController?.viewControllers[currentViewControllerIndex - 1] {
        previousViewController.navigationItem.backBarButtonItem = UIBarButtonItem(title: backButtonTitle, style: .Plain, target: nil, action: nil)
}