完成予想図
Tabman参考記事
公式HPを参照するとわかりやすいです!
https://github.com/uias/Tabman/blob/master/Cartfilehttps://github.com/uias/Tabman/blob/master/Cartfile
つまずきやすいところ
親コントローラーと子コントローラーを作ります!
この時、コントローラー同士をsegueでつなぐ必要はありません!
注意点①
segueで繋げていない代わりに、storyboardで、Moduleを指定してあげる必要があります!
ファイル名で指定してあげましょう!
注意点②
タブの名前が複数の時は、for文を使って一つずついれて返しましょう!(以下コード参照)
let titilename = ["名前1","名前2"]
var items = [TMBarItem]()
for i in titilename {
let title = TMBarItem(title: i)
items.append(title)
}
親コントローラーのコード
①ライブラリTabmanをいれる
②subclassをUIViewControllerで指定した後に、TabmanViewControllerに変える
③子コントローラーの名前をstoryboardに登録
④storyboardでModuleの設定(上の注意点参照)
import UIKit
import Tabman
import Pageboy
class BigCalendarViewController: TabmanViewController {
private var viewControllers = [UIViewController]()
override func viewDidLoad() {
super.viewDidLoad()
self.dataSource = self
//tabmanの宣言
let bar = TMBar.ButtonBar()
bar.layout.transitionStyle = .snap
addBar(bar, dataSource: self, at: .top)
}
private func setTabsControllers() {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let ViewController1 = storyboard.instantiateViewController(withIdentifier: "子コントローラーの名前")
let ViewController2 = storyboard.instantiateViewController(withIdentifier: "子コントローラーの名前2")
viewControllers = [
ViewController1,
ViewController2
]
}
}
extension BigCalendarViewController: PageboyViewControllerDataSource, TMBarDataSource{
func barItem(for bar: TMBar, at index: Int) -> TMBarItemable {
let titilename = ["名前1","名前2"]
var items = [TMBarItem]()
for i in titilename {
let title = TMBarItem(title: i)
items.append(title)
}
return items[index]
}
func numberOfViewControllers(in pageboyViewController: PageboyViewController) -> Int {
setTabsControllers()
return viewControllers.count
}
func viewController(for pageboyViewController: PageboyViewController,
at index: PageboyViewController.PageIndex) -> UIViewController? {
return viewControllers[index]
}
func defaultPage(for pageboyViewController: PageboyViewController) -> PageboyViewController.Page? {
return nil
}
func barItem(for tabViewController: TabmanViewController, at index: Int) -> TMBarItemable {
let title = "Page \(index)"
return TMBarItem(title: title)
}
}