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

Sam*_*Sam 23 uitabbarcontroller ios swift

我有四个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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是调用,但标题永远不会设置.与self.tabBarItem.title ="标题"相同

我也尝试在viewDidLoad中设置标题,但是只有在转到视图控制器后才更新标题.

思考?

kei*_*ter 34

您可以viewDidLoad通过设置视图控制器的title属性在视图控制器本身中设置选项卡标题.

title = "Number 0"
Run Code Online (Sandbox Code Playgroud)

或者,如果要从标签栏控制器设置标题,可以在标签栏控制器中将它们设置为viewDidLoad:

tabBar.items?[0].title = "Number 0"
tabBar.items?[1].title = "Number 1"
Run Code Online (Sandbox Code Playgroud)

  • 恕我直言tabBar不应该给出关于如何命名视图控制器的sh*t. (7认同)
  • @vahotm 在这种情况下使用 `self.navigationItem.title = "Number 0"` (2认同)

Sam*_*Sam 22

我想通了,看起来好像被awakeFromNib()写了一遍.

override func awakeFromNib() {
    super.awakeFromNib()

    self.title = NSLocalizedString(MyConstants.StringKeys.TabName, tableName: Constants.Strings.MyTable, comment: Constants.EmptyString);
}
Run Code Online (Sandbox Code Playgroud)

我在那里移动了我的自我分配,它纠正了我的问题.


小智 8

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

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"
}
Run Code Online (Sandbox Code Playgroud)


小智 5

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

    override func awakeFromNib() {
    self.tabBarItem.title = "title"
    self.tabBarItem.image = "image.png"
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

  • 请注意,如果您的视图控制器在UINavigationController中(不是您的子类),则可以使用`navigationController?.tabBarItem.title =“ title”`` (2认同)