2014-12-10 5 views
12

У меня есть четыре UIViewControllers, которые связаны с панелью вкладок UITabBarController. Мне нужно установить заголовки элементов вкладки за пределами раскадровки и внутри их классов.Программный параметр tabBarItem title в Swift

Я пытался ..

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

Мысли?

ответ

17

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

override func awakeFromNib() { 
    super.awakeFromNib() 

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

Я переместил свое назначение self.title там, и оно исправило мою проблему.

18

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

title = "Number 0" 

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

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

ИМХО TabBar не должно дать дерьмо о том, как его вид контроллеров называются. – vahotm

+0

@vahotm use 'self.navigationItem.title =" Number 0 "' в этом случае –

3

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

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

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

Спасибо.

2

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

Это работает для меня. Я пробовал как viewDidLoad(), так и awakeFromNib(), но не работал оттуда. Кстати, я не думаю, что охранник ... это хорошо. Вы хотите получить исключение, если не смогли установить заголовки для 3-х элементов. –

Смежные вопросы