Изменить BackBarButtonItem для всех контроллеров UIView?

Я хотел бы изменить BackBarButtonItem на всех представлениях в моем приложении для iOS, чтобы они отображали только стрелку назад без текста.

Единственный способ сделать это - пройти через каждый UIViewController и установить self.navigationItem.backBarButtonItem.title? Кажется, я должен быть в состоянии создать суперкласс, чтобы определить значение по умолчанию backBarButtonItem.title, но я не уверен, с чего начать.

Спасибо за помощь.

1 ответ

Решение

Вам не нужно менять его на каждом классе контроллера представления. Вы можете либо передать его и изменить один раз, либо сделать это в своем делегате приложения.

Если вы хотите создать подкласс панели навигации, вы можете просто установить кнопку "Назад" с текстом @"":

  UIBarButtonItem *newBackButton = 
  [[UIBarButtonItem alloc] initWithTitle:@"" 
                                     style:UIBarButtonItemStylePlain 
                                    target:nil 
                                    action:nil];
  [[self navigationItem] setBackBarButtonItem:newBackButton];

Если вы хотите сделать это в приложении делегата, вы можете сделать это двумя способами:

Один из способов - установить цвет текста кнопки как прозрачный:

[[UIBarButtonItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor clearColor]} forState:UIControlStateNormal];

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

    [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -200) forBarMetrics:UIBarMetricsDefault];

Мы можем реализовать функцию делегата контроллера навигации и установить делегат для контроллера представления, реализующего эту функцию:

1) navigationController.delegate = yourViewController

2) Функция делегата:

func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
    viewController.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}

Это удалит текст заголовка кнопки всех следующих контроллеров представления

Другие вопросы по тегам