Изменить 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)
}
Это удалит текст заголовка кнопки всех следующих контроллеров представления