【问题标题】:Programmatically setting tabBarItem title in Swift在 Swift 中以编程方式设置 tabBarItem 标题
【发布时间】:2015-02-09 00:51:57
【问题描述】:

我有四个 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 = "标题"

我也尝试在 viewDidLoad 中设置标题,但这只会在进入视图控制器后更新标题。

想法?

【问题讨论】:

    标签: ios swift uitabbarcontroller


    【解决方案1】:

    您可以通过设置视图控制器的title 属性,在viewDidLoad 中设置视图控制器本身的标签标题。

    title = "Number 0"
    

    或者,如果想从标签栏控制器设置标题,您可以在标签栏控制器的viewDidLoad 中像这样设置它们:

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

    【讨论】:

    • 恕我直言,tabBar 不应该对它的视图控制器是如何命名的。
    • @vahotm 在这种情况下使用self.navigationItem.title = "Number 0"
    【解决方案2】:

    我想通了,看起来它被 awakeFromNib() 覆盖了。

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

    我将我的 self.title 作业移到那里,它纠正了我的问题。

    【讨论】:

      【解决方案3】:

      我一直在尝试不同的解决方案,但唯一对我有用的是在UITabBarControllerviewWillAppear 方法中添加标签栏设置代码。我不会在每个视图控制器中单独执行此操作,因为它仅在按下标签栏按钮时才有效:

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

      【讨论】:

      • 这对我有用。我尝试了 viewDidLoad() 和 awakeFromNib() 但没有从那里工作。顺便说一句,我不认为后卫......是好的。如果未能为 3 个项目设置标题,您确实希望获得例外。
      • 这对我有用.. viewDidLoad 不起作用..
      【解决方案4】:

      这是每个 viewController.swift 文件中的解决方案,您只需添加以下代码即可

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

      这是一个超级简单的 awakeFromNib 方法,当 nib 在启动时创建简单时,您可以轻松调用任何东西,因为在 ViewDidLoad 或单击或选择时调用的任何 viewControllerDelegate 方法中。所以这是一个超级简单的功能。

      谢谢。

      【讨论】:

      • 请注意,如果您的视图控制器在 UINavigationController 中(您没有子类化),您可以使用 `navigationController?.tabBarItem.title = "title"``
      • @dulgan 谢谢,这就是我要找的东西!
      【解决方案5】:

      在第一个 Viewcontroller 上的 ViewDidLoad 中执行以下操作:

      override func viewDidLoad() {
      
      ...
      
          self.tabBarController?.viewControllers?[1].tabBarItem.title = NSLocalizedString("Home", comment: "")
          self.tabBarController?.viewControllers?[2].tabBarItem.title = NSLocalizedString("Tab 1", comment: "")
          self.tabBarController?.viewControllers?[3].tabBarItem.title = NSLocalizedString("Tab 2", comment: "")
          self.tabBarController?.viewControllers?[4].tabBarItem.title = NSLocalizedString("Tab 3", comment: "")
      
      ...
      }
      

      【讨论】:

        【解决方案6】:

        如果您在放入TabBarController 之前以编程方式创建ViewControllers,请尝试以下操作:

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

        【讨论】:

          【解决方案7】:

          在 Swift 5 中:

          创建自定义标签栏类。

          在 ViewDidLoad 中添加:

           self.viewControllers?[0].tabBarItem.title = NSLocalizedString("Home", comment: "")
           self.viewControllers?[1].tabBarItem.title = NSLocalizedString("Action", comment: "")
           self.viewControllers?[2].tabBarItem.title = NSLocalizedString("Find LifePass", comment: "")
          

          【讨论】:

            猜你喜欢
            • 2020-11-03
            • 2020-05-31
            • 2014-05-08
            • 2011-04-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多