UIViewControllerによって拡張されたクラスからプログラムでタブを作成する方法:
class DashboardTabBarController: UITabBarController {
override func viewDidLoad() {
//here
}
...
}
PDATE Swift 5
UITabBarController
をプログラムで作成する方法の一例は、次のようになります。
まず、タブバーインターフェイスの各タブのコンテンツとなるUIViewControllers
を作成します。この例では、非常に単純なものを1つだけ作成します。
class Item1ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.green
self.title = "item1"
print("item 1 loaded")
}
}
さて、UITabBarController
:
タブバーに表示するUIViewControllers
の新しいインスタンスを作成します。次に、作成した各インスタンスのアイコンを作成し、タブバーインターフェイスの各タブのコンテンツを指定するすべてのUIViewControllers
を含む配列を作成します。 配列内のView Controllerの順序は、タブバー内の表示順序に対応しています。
class DashboardTabBarController: UITabBarController, UITabBarControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
delegate = self
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let item1 = Item1ViewController()
let icon1 = UITabBarItem(title: "Title", image: UIImage(named: "someImage.png"), selectedImage: UIImage(named: "otherImage.png"))
item1.tabBarItem = icon1
let controllers = [item1] //array of the root view controllers displayed by the tab bar interface
self.viewControllers = controllers
}
//Delegate methods
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
print("Should select viewController: \(viewController.title ?? "") ?")
return true;
}
}
ViewControllersにストーリーボードを使用している場合、Tabbarcontrollerクラスにこのように記述する必要があります。
class CustomTabbarController : UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let firstViewController = FirstViewController()
let navigationController = UINavigationController(rootViewController: firstViewController)
navigationController.title = "First"
navigationController.tabBarItem.image = UIImage.init(named: "map-icon-1")
viewControllers = [navigationController]
if let secondViewController = storyboard.instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController {
let navgitaionController1 = UINavigationController(rootViewController: secondViewController)
navgitaionController1.title = "Second"
navgitaionController1.tabBarItem.image = UIImage.init(named: "second-icon-1")
var array = self.viewControllers
array?.append(navgitaionController1)
self.viewControllers = array
}
}
}