在 Swift 中以编程方式设置 tabBarItem 标题

Posted

技术标签:

【中文标题】在 Swift 中以编程方式设置 tabBarItem 标题【英文标题】:Programmatically setting tabBarItem title in Swift 【发布时间】:2015-02-09 00:51:57 【问题描述】:

我有四个 UIViewControllers 链接到一个 UITabBarController 的标签栏。我需要在故事板之外设置标签栏项目标题,并在它们的类内。

我试过了..

class MyViewController: UIViewController 

    required init(coder aDecoder: NSCoder) 
        super.init(coder: aDecoder)

        self.title = NSLocalizedString(MyConstants.StringKeys.TabName, tableName: Constants.Strings.MyTable, comment: Constants.EmptyString);
    

这已被调用,但从未设置标题。同 self.tabBarItem.title = "标题"

我也尝试在 viewDidLoad 中设置标题,但这只会在进入视图控制器后更新标题。

想法?

【问题讨论】:

【参考方案1】:

您可以通过设置视图控制器的title 属性,在viewDidLoad 中设置视图控制器本身的标签标题。

title = "Number 0"

或者,如果想从标签栏控制器设置标题,您可以在标签栏控制器的viewDidLoad 中像这样设置它们:

tabBar.items?[0].title = "Number 0"
tabBar.items?[1].title = "Number 1"

【讨论】:

恕我直言,tabBar 不应该对它的视图控制器是如何命名的。 @vahotm 在这种情况下使用self.navigationItem.title = "Number 0"【参考方案2】:

我想通了,看起来它被 awakeFromNib() 覆盖了。

override func awakeFromNib() 
    super.awakeFromNib()

    self.title = NSLocalizedString(MyConstants.StringKeys.TabName, tableName: Constants.Strings.MyTable, comment: Constants.EmptyString);

我将我的 self.title 作业移到那里,它纠正了我的问题。

【讨论】:

【参考方案3】:

我一直在尝试不同的解决方案,但唯一对我有用的是在UITabBarControllerviewWillAppear 方法中添加标签栏设置代码。我不会在每个视图控制器中单独执行此操作,因为它仅在按下标签栏按钮时才有效:

override func viewWillAppear(_ animated: Bool) 
    super.viewWillAppear(animated)

    guard let items = tabBar.items else  return 

    items[0].title = "Title0"
    items[1].title = "Title1"
    items[2].title = "Title2"
    items[3].title = "Title3"

【讨论】:

这对我有用。我尝试了 viewDidLoad() 和 awakeFromNib() 但没有从那里工作。顺便说一句,我不认为后卫......是好的。如果未能为 3 个项目设置标题,您确实希望获得例外。 这对我有用.. viewDidLoad 不起作用..【参考方案4】:

这是每个 viewController.swift 文件中的解决方案,您只需添加以下代码即可

    override func awakeFromNib() 
    self.tabBarItem.title = "title"
    self.tabBarItem.image = "image.png"

这是一个超级简单的 awakeFromNib 方法,当 nib 在启动时创建简单时,您可以轻松调用任何东西,因为在 ViewDidLoad 或单击或选择时调用的任何 viewControllerDelegate 方法中。所以这是一个超级简单的功能。

谢谢。

【讨论】:

请注意,如果您的视图控制器在 UINavigationController 中(您没有子类化),您可以使用 `navigationController?.tabBarItem.title = "title"`` @dulgan 谢谢,这就是我要找的东西!【参考方案5】:

在第一个 Viewcontroller 上的 ViewDidLoad 中执行以下操作:

override func viewDidLoad() 

...

    self.tabBarController?.viewControllers?[1].tabBarItem.title = NSLocalizedString("Home", comment: "")
    self.tabBarController?.viewControllers?[2].tabBarItem.title = NSLocalizedString("Tab 1", comment: "")
    self.tabBarController?.viewControllers?[3].tabBarItem.title = NSLocalizedString("Tab 2", comment: "")
    self.tabBarController?.viewControllers?[4].tabBarItem.title = NSLocalizedString("Tab 3", comment: "")

...

【讨论】:

【参考方案6】:

如果您在放入TabBarController 之前以编程方式创建ViewControllers,请尝试以下操作:

override init(style: UITableViewStyle) 
    super.init(style: style)

    self.title = "Title"

或者这个,如果不是TableViewController

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) 
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)

    self.title = "Title"

【讨论】:

【参考方案7】:

在 Swift 5 中:

创建自定义标签栏类。

在 ViewDidLoad 中添加:

 self.viewControllers?[0].tabBarItem.title = NSLocalizedString("Home", comment: "")
 self.viewControllers?[1].tabBarItem.title = NSLocalizedString("Action", comment: "")
 self.viewControllers?[2].tabBarItem.title = NSLocalizedString("Find LifePass", comment: "")

【讨论】:

以上是关于在 Swift 中以编程方式设置 tabBarItem 标题的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 Swift 中以编程方式设置 rightBarButton

在 Swift 中以编程方式为 CollectionView 设置插图

在 Swift 中以编程方式设置动作监听器

在 Swift 中以编程方式设置 XIB 文件的约束

如何在 swift 3 中以编程方式为 barButtonItem 设置操作?

在 Swift 中以编程方式设置根视图控制器