从另一个类 Swift 访问 navigationItem.title

Posted

技术标签:

【中文标题】从另一个类 Swift 访问 navigationItem.title【英文标题】:Access navigationItem.title from another class Swift 【发布时间】:2020-01-17 23:50:20 【问题描述】:

如何从单独的类访问导航控制器内的标题?我通过 Storyboard 将我的 mainVC 嵌入到导航控制器中。我可以从viewDidLoad 内部访问标题,就像self.navigationItem.title = "MyTitle" 一样。但是,我需要像这样从单独的类'CustomNavigation 访问标题:

class: CustomNavigation: UIViewController() 
   override func viewDidLoad()
      super.viewDidLoad()

      func createCustomNav()

         self.navigationItem.title = "MyTitle"
      

   


不幸的是,它不起作用。我也试过这个:

func createCustomNav()

   let nav = UINavigationBar()
   let title = UINavigationItem(title: "MyTitle")
   nav.setItems([title], animated: false)
   self.view.addSubview(nav)

这也不起作用。我没有收到任何错误。

我在 mainVC 中实例化 CustomNavigationvar customNavigation = CustomNavigation()

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

建立一个描述你想要完成的工作的协议。

protocol NavigationTitler 
    func updateTitle(with title: String)

定义你的班级将如何使用协议。

class CustomNavigation: UINavigationController 
    var titleDelegate: NavigationTitler?
    func work() 
        if let del = titleDelegate 
            del.updateTitle(with: "Title from other object")
        
    

实施协议(这是给你的mainVC)。

class ViewController: UIViewController, NavigationTitler 
    var customNavigation: CustomNavigation?
    func updateTitle(with title: String) 
        self.navigationItem.title = title
    
    func buildCustomController() 
        customNavigation = CustomNavigation()
        customNavigation!.titleDelegate = self
    

【讨论】:

【参考方案2】:

从 UITabBarItem 中获取标题,在当前 VC 中用作标题:

//Titel einstellen
let x = navigationController?.tabBarItem.title ?? ""
self.title = x //titel in VC

【讨论】:

以上是关于从另一个类 Swift 访问 navigationItem.title的主要内容,如果未能解决你的问题,请参考以下文章

从另一个文件导入类后,React Navigation Switch Navigator 不起作用

在 Swift 中从另一个 ViewController 访问变量

Swift - 从另一个函数访问 UIView 的实例

swift Swift - 从另一个类调用一个方法

从另一个类Swift调用一个类的函数

swift - 如何从另一个类设置 UIStepper 值?