Программная настройка заголовка 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);
    }
}

Это называется, но название не установлено. То же самое с собой.tabBarItem.title = "название"

Я также попытался установить заголовок в viewDidLoad, но это только обновляет заголовок после перехода в представление контроллер.

мысли?

5 ответов


вы можете установить заголовки вкладок в самих контроллерах представления в viewDidLoad установив контроллер вида title собственность.

title = "Number 0"

кроме того, если вы хотите установить заголовки с вашего контроллера панели вкладок, вы можете установить их так в viewDidLoad:

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

Я понял это, похоже, что это было написано awakeFromNib ().

override func awakeFromNib() {
    super.awakeFromNib()

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

я пошевелился.назначение титула там и исправило мою проблему.


вот решение в каждом viewController.Свифт файл вы можете просто добавить следующий код

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

Это супер простой метод awakeFromNib, и вы можете легко вызвать любую вещь, когда nib создал простой при запуске, потому что в ViewDidLoad или любой метод viewControllerDelegate вызывается при нажатии или выборе. Так что это очень простая функция.

спасибо.


Я пробовал разные решения, но единственное, что работал для меня было добавление панели вкладок настроить код 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"
}

если вы создадите свой ViewControllers программно, прежде чем положить к TabBarController, попробуйте это:

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"
}