Программное задание имени tabBarItem в 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);
}
}
Это называется, но заголовок никогда не устанавливается. То же самое с self.tabBarItem.title= "title"
Я также попытался установить заголовок в viewDidLoad, но это только обновляет заголовок после перехода к контроллеру представления.
Мысли?
Ответы
Ответ 1
Я понял, похоже, что это было написано awakeFromNib().
override func awakeFromNib() {
super.awakeFromNib()
self.title = NSLocalizedString(MyConstants.StringKeys.TabName, tableName: Constants.Strings.MyTable, comment: Constants.EmptyString);
}
Я переместил свое назначение self.title там, и он исправил мою проблему.
Ответ 2
Вы можете установить заголовки табуляции в самих контроллерах представления в viewDidLoad
, установив свойство диспетчера представлений title
.
title = "Number 0"
В качестве альтернативы, если вы хотите установить заголовки из своего контроллера панели вкладок, вы можете установить их так, как это, в вашем контроллере панели вкладок viewDidLoad
:
tabBar.items?[0].title = "Number 0"
tabBar.items?[1].title = "Number 1"
Ответ 3
Вот решение в каждом файле viewController.swift вы можете просто добавить следующий код
override func awakeFromNib() {
self.tabBarItem.title = "title"
self.tabBarItem.image = "image.png"
}
Это супер легкий метод awakeFromNib, и вы можете легко вызвать любую вещь, когда nib создал простой при запуске, потому что в ViewDidLoad или любом методе viewControllerDelegate вызывается при нажатии или выборе. Так что супер простая функция.
Спасибо.
Ответ 4
Я пробовал разные решения, но единственным, что работало для меня, было добавление панели вкладок, создавшей код в методе 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"
}