Files
Attractor/App/Tabs/TabBarViewController.swift

79 lines
2.3 KiB
Swift
Raw Normal View History

//
// TabBarViewController.swift
// App
//
// Created by James Magahern on 10/28/20.
//
import Combine
import UIKit
class TabBarViewController: UIViewController, TabBarViewDataSource, TabBarViewDelegate
{
let tabBarView = TabBarView()
private var tabController: TabController
private var tabObserver: AnyCancellable?
private var activeTabIndexObserver: AnyCancellable?
override func loadView() {
self.view = tabBarView
}
init(tabController: TabController) {
self.tabController = tabController
super.init(nibName: nil, bundle: nil)
tabBarView.dataSource = self
tabBarView.delegate = self
tabBarView.reloadTabs()
tabObserver = tabController.$tabs.sink(receiveValue: { [tabBarView] (newTabs: [Tab]) in
DispatchQueue.main.async { tabBarView.reloadTabs() }
})
activeTabIndexObserver = tabController.$activeTabIndex.sink(receiveValue: { [tabBarView] (activeIndex: Int) in
tabBarView.activateTab(atIndex: activeIndex)
})
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// MARK: TabBarViewDelegate
func tabBarView(_ tabBarView: TabBarView, didClickToActivateTabAtIndex index: Int) {
tabController.activeTabIndex = index
}
func tabBarView(_ tabBarView: TabBarView, didClickToCloseTabAtIndex index: Int) {
let tab = tabController.tabs[index]
tabController.closeTab(tab)
}
// MARK: TabBarViewDataSource
func numberOfTabs(forTabBarView: TabBarView) -> Int {
return tabController.tabs.count
}
func tabBarView(_ tabBarView: TabBarView, titleForTabAtIndex index: Int) -> String {
let defaultTitle = "New Tab"
if let title = tabController.tabs[index].title, title.count > 0 {
return title
}
return defaultTitle
}
func tabBarView(_ tabBarView: TabBarView, imageForTabAtIndex index: Int) -> UIImage? {
tabController.tabs[index].favicon
}
func tabBarView(_ tabBarView: TabBarView, uniqueIdentifierForTabAtIndex index: Int) -> UUID {
tabController.tabs[index].identifier
}
}