web-dev-qa-db-ja.com

プログラムでSwiftにtabBarItemタイトルを設定する

UITabBarControllerのタブバーにリンクされている4つのUIViewControllerがあります。タブバー項目のタイトルをストーリーボードの外側とクラスの内側に設定する必要があります。

私はもう試した..

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 = "the title"と同じ

また、viewDidLoadでタイトルを設定しようとしましたが、View Controllerに移動した後にのみタイトルを更新します。

考え?

22
Sam

私はそれを理解しました、それはawakeFromNib()によって上書きされていたようです。

override func awakeFromNib() {
    super.awakeFromNib()

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

Self.titleの割り当てをそこに移動すると、問題が修正されました。

22
Sam

View ControllerのviewDidLoadプロパティを設定することにより、View Controller自体のタブタイトルをtitleで設定できます。

title = "Number 0"

または、Tab Bar Controllerからタイトルを設定する場合、Tab Bar ControllerのviewDidLoadで次のようにタイトルを設定できます。

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

私はさまざまな解決策を試してきましたが、私にとってうまくいったのは、viewWillAppearUITabBarControllerメソッドにコードを設定するタブバーを追加することだけでした。 Tabバーのボタンが押されたときにのみ機能するため、私は各View Controllerで個別にそれを行いません:

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

以下は、すべてのviewController.Swiftファイルのソリューションです。次のコードを追加するだけです。

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

これは非常に簡単なawakeFromNibメソッドです。ViewDidLoadまたは任意のviewControllerDelegateメソッドでクリックまたは選択すると呼び出されるため、開始時にnibが単純に作成されると、任意のものを簡単に呼び出すことができます。これは非常に簡単な機能です。

ありがとう。

5
Poran Ramen

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