gpt4 book ai didi

ios - 为什么重写 View Controller 的 navigationItem 似乎没有任何作用?

转载 作者:行者123 更新时间:2023-11-29 00:12:48 25 4
gpt4 key购买 nike

我现在已经查看了大量关于从 UINavigationBar 上的后退按钮删除文本 的帖子。它们似乎不再起作用(iOS 10+)。即使他们这样做了,他们也不会“闻起来正确”...

我的问题是,为什么这行不通?

class MyViewController: UIViewController {

private var _navItem: UINavigationItem? = nil
override var navigationItem: UINavigationItem {
if _navItem == nil {
let item = super.navigationItem
let backBarButtonItem = UIBarButtonItem(title: "Back", style: .plain, target: nil, action: nil)
backBarButtonItem.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .normal)
backBarButtonItem.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .highlighted)
item.backBarButtonItem = backBarButtonItem
_navItem = item
}
return _navItem!
}
//...
}

我希望看到一个带有明文的按钮,但我看到前一个 View Controller 的标题是后退按钮文本。

我需要继承 UINavigationController 吗?或者乱用 UINavigationBarDelegate

最佳答案

这是一个极其常见的混淆点,因为 API 表面上有点违反直觉。 documentation that explains这也有点复杂

When this navigation item is immediately below the top item in the stack, the navigation controller derives the back button for the navigation bar from this navigation item. When this property is nil, the navigation item uses the value in its title property to create an appropriate back button.

基本上,您需要在“上一个 View Controller ”上执行此操作,而不是在您看到后退按钮的 Controller 上执行此操作。

虽然我不确定您的总体目标是什么,但要在“应用程序范围内”实现这一目标,您有几个选择。

  • 将其放入整个项目的某种全局基本 View Controller 类中。如果您想为应用程序的不同部分使用不同的基类,当然还有处理不同类型的系统 Controller 时,这尤其麻烦。

  • UIAppearance 方法,其缺点(或优点?)会影响每个栏按钮项目,包括后退按钮。尽管无可否认,这个解决方案是全局性的,但它总体上过于宽泛。

    UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .normal)
    UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .highlighted)
  • 在您想要后退按钮的顶部 View Controller 上提供自定义左栏按钮项目。这个解决方案再次需要一个基类,或者良好的“ol copy-pasta”。当然,失去了为您提供系统恢复 V 形的能力。另一种选择是扩展(加布里埃尔的回答提供了一个很好的例子)。

凡事都有权衡。

关于ios - 为什么重写 View Controller 的 navigationItem 似乎没有任何作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45959484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com