当选择不同的选项卡时更改导航栏标题

6

我对xcode还比较陌生。

我试图在我的UITabBarController中选择不同的选项卡时,以编程方式更改导航标题。

我有一个UItabBarController来创建选项卡栏,然后我有单独的UIViewControllers,每个选项卡都有不同的内容 - 这部分工作正常,但是当选择不同的选项卡时,我无法更改导航标题。

这是主选项卡控制器的代码。

// SUPER VIEW DID LOAD

override func viewDidLoad() {
    super.viewDidLoad()
    
    // NAVIGATION ITEM
    navigationItem.title = "Job Information"
    navigationController?.navigationBar.prefersLargeTitles = true
    
    //setup our custom view controllers
    
    let jobInfo = page_jobInfo()
    let shots = page_shotList()
    let attachments = page_attachments()
    let notes = page_notes()
    
    jobInfo.tabBarItem.title = "Information"
    jobInfo.tabBarItem.image = UIImage(named: "jobInfo")
    
    shots.tabBarItem.title = "Shots"
    shots.tabBarItem.image = UIImage(named: "shots")
    
    attachments.tabBarItem.title = "Attachments"
    attachments.tabBarItem.image = UIImage(named: "attachments")
    
    notes.tabBarItem.title = "Notes"
    notes.tabBarItem.image = UIImage(named: "notes")
    
    viewControllers = [jobInfo, shots, attachments, notes]
}

这是第二个标签按钮的代码 - 其他两个标签与此相同,因此不想用大量代码刷屏。
// SUPER VIEW DID LOAD

override func viewDidLoad() {
    super.viewDidLoad()
    
    // NAVIGATION ITEM
    navigationItem.title = "Shot List"
    navigationController?.navigationBar.prefersLargeTitles = true
    
}

你的tabBarController是否被推到了navigationController中? - Milan Nosáľ
我将tabBarController设置为我的顶层,然后有4个不同的TableViewControllers,分别代表每个选项卡按钮。我在viewDidLoad中设置NavigationBar的标题。 - spoax
但是导航栏在哪里设置?默认情况下,tabController和tableViewController都没有navigationBar。 - Milan Nosáľ
除了我的应用程序委托中的这行代码,我没有看到任何地方设置它。在哪里我有window?.rootViewController = UINavigationController(rootViewController: page_jobList()) - spoax
感谢你的帮助,但是@DanKarbay的答案有效。 - spoax
显示剩余2条评论
1个回答

13

由于您的视图控制器嵌入了 UITabBarController,所以您应该更改其(选项卡栏控制器的)navigationItem。此外,您应该在 viewWillAppear 方法中执行此操作,而不是在 viewDidLoad 中执行,如下所示:

override func viewWillAppear(_ animated: Bool) {
  super.viewWillAppear(animated)
  self.tabBarController?.navigationItem.title = "Bookmarks"
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接