【问题标题】:programmatically creating a UITabBarController subViews not loading UITabBarItem images以编程方式创建不加载 UITabBarItem 图像的 UITabBarController 子视图
【发布时间】:2017-06-07 21:06:01
【问题描述】:

我正在以编程方式将 Storyboards 加载到 UITabBarController 中,但由于某种原因,UITabBarItem 没有加载图像或 selectedImage,除了第一个选项卡没有加载

但是如果你点击其他选项卡图标加载

加载故事板示例

import UIKit

class ProfileViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let defaultImag = UIImage(named: "Profile")?.withRenderingMode(.alwaysOriginal)
        let selectedImag = UIImage(named: "Profile_selected")?.withRenderingMode(.alwaysOriginal)

        self.tabBarItem = UITabBarItem(title: nil, image: defaultImag, selectedImage: selectedImag)
        self.tabBarItem.imageInsets = UIEdgeInsets(top: 10, left: 0, bottom: -10, right: 0);
    }

}

UITabBarController

import UIKit

class TabBarViewController:  UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)


        let discoverStoryboard = UIStoryboard(name: "Discover", bundle: nil)
        let discoverViewController = discoverStoryboard.instantiateInitialViewController()! as UIViewController

        let favouritesStoryboard = UIStoryboard(name: "Favourites", bundle: nil)
        let favouritesViewController = favouritesStoryboard.instantiateInitialViewController()! as! FavouritesViewController

        let profileStoryboard = UIStoryboard(name: "Profile", bundle: nil)
        let profileViewController = profileStoryboard.instantiateInitialViewController()! as UIViewController

        self.viewControllers = [discoverViewController, favouritesViewController, profileViewController]

    }
}

【问题讨论】:

  • 图片没有加载?
  • 我添加了屏幕截图

标签: ios swift uikit uitabbarcontroller


【解决方案1】:
private func createTabForStoryBoard(storyBoardName: String, title: String, imageName :String, tag: Int) -> (UINavigationController) {

        let storyboard  = UIStoryboard(name: storyBoardName as String, bundle: nil)
        let viewController  = storyboard.instantiateInitialViewController() as! UIViewController

        let image = UIImage(named: imageName)
        let tabBarItem:UITabBarItem = UITabBarItem.init(title: NSLocalizedString(title, comment: "Tab Bar Names") , image: image, tag: 0)

        viewController.tabBarItem = tabBarItem
        return viewController

    }


    // MARK: Custom Methods

    func setTabBarViewControllers() {
        let discoverViewController = self.createTabForStoryBoard("Discover", title: "Discover", imageName: "<image-name>", tag: 1)

        let favouritesViewController = self.createTabForStoryBoard("Favourites", title: "Favourites", imageName: "<image-name>", tag: 2)

        let profileViewController = self.createTabForStoryBoard("Profile", title: "Profile", imageName: "<image-name>", tag: 3)

        let tabBarViewControllers = [discoverViewController, favouritesViewController, profileViewController]
        self.viewControllers = tabBarViewControllers
    }

【讨论】:

  • 将 UITabBarItem 的 Init 移动到自定义 UITabBarController 有效,但如果 UIViewController 已使用 UITabBarItem 初始化,它应该在加载选项卡时读取其值,为什么它不起作用?
猜你喜欢
  • 2016-07-19
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
  • 2011-09-20
  • 2013-08-22
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多