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