読者です 読者をやめる 読者になる 読者になる

そーす

福岡在住のプログラマ。SwiftとかKotlinとかJavascriptとかSketchとか触ってます。

コードからUITabBarControllerを作成

f:id:saburesan:20160427075732p:plain

コードからUITabBarControlelr生成するときに少し躓いたので

ダメな実装

convenience init() {
        self.init(nibName: nil, bundle: nil)

        homeViewController = HomeViewController()
        searchViewController = SearchViewController()
        homeViewController.tabBarItem
            = UITabBarItem(title: R.string.localizable.tab_home(), image: R.image.homeTab(), tag: 0)
        searchViewController.tabBarItem
            = UITabBarItem(title: R.string.localizable.tab_search(), image: R.image.searchTab(), tag: 1)
        setViewControllers(
            [homeViewController, searchViewController], animated: false)
    }

ちなみにリソース管理はR.swiftでやってます R.swiftでリソース関連のハードコーディングを無くす - Sablog

ダメな理由

  • デフォルトで先頭のタブが選択状態になっていない
  • タブをタップすると初回は色が変わらないが2回め以降で色が変わるバグが見られた

良い実装

    override func viewDidLoad() {
        super.viewDidLoad()

        homeViewController = HomeViewController()
        searchViewController = SearchViewController()
        homeViewController.tabBarItem
            = UITabBarItem(title: R.string.localizable.tab_home(), image: R.image.homeTab(), tag: 0)
        searchViewController.tabBarItem
            = UITabBarItem(title: R.string.localizable.tab_search(), image: R.image.searchTab(), tag: 1)
        setViewControllers(
            [homeViewController, searchViewController], animated: false)
    }

viewDidLoadじゃないとダメなんだって