web-dev-qa-db-fra.com

Définition par programme du titre tabBarItem dans Swift

J'ai quatre UIViewControllers qui sont liés à la barre d'onglets UITabBarController. Je dois définir les titres des éléments de la barre d'onglets en dehors du storyboard et à l'intérieur de leurs classes.

J'ai essayé..

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);
    }
}

Cela s'appelle, mais le titre n'est jamais défini. Idem avec self.tabBarItem.title = "le titre"

J'ai également essayé de définir le titre dans viewDidLoad, mais cela ne met à jour le titre qu'après être allé au contrôleur de vue.

Pensées?

22
Sam

Je l'ai compris, on dirait qu'il était en train d'être écrasé par awakeFromNib ().

override func awakeFromNib() {
    super.awakeFromNib()

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

J'ai déplacé mon affectation self.title là-bas et cela a corrigé mon problème.

22
Sam

J'ai essayé différentes solutions mais la seule qui a fonctionné pour moi a été d'ajouter la barre d'onglets pour configurer le code dans la méthode viewWillAppear dans la UITabBarController. Je ne le fais pas dans chaque contrôleur de vue individuellement, car cela ne fonctionne que lorsque le bouton de la barre d'onglets est enfoncé:

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"
}
6
Ginés SM

Voici la solution dans chaque fichier viewController.Swift, vous pouvez simplement ajouter le code suivant

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

C'est une méthode awakeFromNib super facile et vous pouvez facilement appeler n'importe quoi lorsque nib a créé simple au démarrage car dans ViewDidLoad ou dans toute méthode viewControllerDelegate appelée lorsque vous avez cliqué ou sélectionné. C'est donc une fonction super facile.

Merci.

5
Poran Ramen

Si vous créez votre ViewControllers par programme avant de le placer dans le TabBarController, essayez ceci:

override init(style: UITableViewStyle) {
    super.init(style: style)

    self.title = "Title"
}

ou ceci, s'il ne s'agit pas d'un TableViewController:

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)

    self.title = "Title"
}
0
wzbozon