为所有UIViewControllers更改BackBarButtonItem?

时间:2016-01-13 17:32:55

标签: ios objective-c uiviewcontroller uinavigationitem backbarbuttonitem

我想更改iOS应用中所有视图的BackBarButtonItem,以便它们只显示没有文字的后退箭头。

实现此目的的唯一方法是遍历每个UIViewController并设置self.navigationItem.backBarButtonItem.title?似乎我应该能够创建一个超类来定义backBarButtonItem.title的默认值,但我不知道从哪里开始。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您不需要在每个视图控制器类上更改它。您可以升级它并更改一次,或者您可以在您的应用代理中执行此操作。

如果您想要导航栏的子类,您可以使用文本@""简单地设置后退按钮:

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

如果您想在app delegate中执行此操作,可以通过两种方式执行此操作:

一种方法是将按钮文本颜色设置为清晰颜色:

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

另一种方法是将后退按钮放在远离屏幕的位置,这样用户就无法看到它

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

答案 1 :(得分:-1)

我们可以实现导航控制器的委托功能,并为实现该功能的视图控制器设置委托:

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)
}

这将删除以下所有视图控制器的后退按钮标题文本