Подтвердить что ты не робот

Программное задание имени 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, но это только обновляет заголовок после перехода к контроллеру представления.

Мысли?

4b9b3361

Ответ 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"
}