[Swift3.0]コードでUITabBarControllerを実装

More than 1 year has passed since last update.

storyboadでUITabBarControllerを用いるのではなく、コードで実装してみました。

流れとしては


  1. ページを格納する配列[viewControllers]を用意

  2. 遷移先のVCがあるstoryboadをインスタンス化

  3. 遷移先のVCをインスタンス化

  4. インスタンス化したVCにtabBarItemを紐づける

  5. [viewControllers]の配列に格納

  6. tabBarControllerにセット

  7. rootViewControllerをUITabBarControllerにする

まずstoryboadとViewControllerを紐付けたセットをタブの数用意します。

今回はわかりやすいように


  • First.storyboadとFirstViewController

  • Second.storyboadとSecondViewController

  • Third.storyboadとThirdViewController

と、3つのページを準備しておきます。

そしてAppDelegate.swiftに以下のように記述します。


AppDelegate.swift

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

// ページを格納する配列
var viewControllers: [UIViewController] = []

// 1ページ目になるViewController
let firstSB = UIStoryboard(name: "First", bundle: nil)
let firstVC = firstSB.instantiateInitialViewController()! as UIViewController
firstVC.tabBarItem = UITabBarItem(tabBarSystemItem: .search, tag: 1)
viewControllers.append(firstVC)

// 2ページ目になるViewController
let secondSB = UIStoryboard(name: "Second", bundle: nil)
let secondVC = secondSB.instantiateInitialViewController()! as UIViewController
secondVC.tabBarItem = UITabBarItem(tabBarSystemItem: .favorites, tag: 2)
viewControllers.append(secondVC)

// 3ページ目になるViewController
let thirdSB = UIStoryboard(name: "Third", bundle: nil)
let thirdVC = thirdSB.instantiateInitialViewController()! as UIViewController
thirdVC.tabBarItem = UITabBarItem(tabBarSystemItem: .contacts, tag: 3)
viewControllers.append(thirdVC)

// ViewControllerをセット
let tabBarController = UITabBarController()
tabBarController.setViewControllers(viewControllers, animated: false)

// rootViewControllerをUITabBarControllerにする
window = UIWindow()
window?.rootViewController = tabBarController
window?.makeKeyAndVisible()

return true
}
}


すると以下のようなタブバーになります。

スクリーンショット 2017-02-28 0.13.27.png

pointとしては遷移するViewControllerとstortyboadを指定すること。

最初指定してあげなかったら黒い画面になってしまいました。。。