Skip to content

Instantly share code, notes, and snippets.

@DonMag
Created January 3, 2020 13:32
Show Gist options
  • Save DonMag/b110502a78c50749f2c73ca31d281508 to your computer and use it in GitHub Desktop.
Save DonMag/b110502a78c50749f2c73ca31d281508 to your computer and use it in GitHub Desktop.
final class TabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
self.viewControllers = [
TabBarItems.home.tabController,
TabBarItems.search.tabController,
TabBarItems.cart.tabController,
TabBarItems.account.tabController
]
self.tabBar.isTranslucent = false
}
}
extension TabBarController {
enum TabBarItems {
case home
case search
case cart
case account
var title: String {
switch self {
case .home:
return "Home"
case .search:
return "Search"
case .cart:
return "Bag"
case .account:
return "Account"
}
}
var tabController: UINavigationController {
switch self {
case .home:
return createNavController(viewController: HomeController(), title: self.title, imageName: "home") //Assets.home.rawValue)
case .search:
return createNavController(viewController: UIViewController(), title: self.title, imageName: "search") //Assets.search.rawValue)
case .cart:
return createNavController(viewController: BagController(), title: self.title, imageName: "shoppingBag") //Assets.shoppingBag.rawValue)
case .account:
return createNavController(viewController: AccountController(), title: self.title, imageName: "account") //Assets.account.rawValue)
}
}
private func createNavController(viewController: UIViewController, title: String, imageName: String) -> UINavigationController {
let navController = UINavigationController(rootViewController: viewController)
viewController.view.backgroundColor = .white
navController.tabBarItem.title = title
navController.tabBarItem.image = UIImage(named: imageName) // imageName.image
return navController
}
}
}
class MyBaseViewController: UIViewController {
let pushButton: UIButton = {
let b = UIButton()
b.translatesAutoresizingMaskIntoConstraints = false
b.backgroundColor = .systemRed
b.setTitle("Push", for: .normal)
return b
}()
override func viewDidLoad() {
super.viewDidLoad()
print("load:", String(describing: self))
let v = UILabel()
v.translatesAutoresizingMaskIntoConstraints = false
v.text = String(describing: self)
v.backgroundColor = .cyan
view.addSubview(v)
NSLayoutConstraint.activate([
v.centerXAnchor.constraint(equalTo: view.centerXAnchor),
v.centerYAnchor.constraint(equalTo: view.centerYAnchor),
])
view.addSubview(pushButton)
NSLayoutConstraint.activate([
pushButton.centerXAnchor.constraint(equalTo: view.centerXAnchor),
pushButton.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 20.0),
])
pushButton.addTarget(self, action: #selector(testPush), for: .touchUpInside)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print("will:", String(describing: self))
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("did:", String(describing: self))
}
@objc func testPush() -> Void {
let vc = PushedController()
self.navigationController?.pushViewController(vc, animated: true)
}
}
class HomeController: MyBaseViewController {
}
class BagController: MyBaseViewController {
}
class AccountController: MyBaseViewController {
}
class PushedController: MyBaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .systemYellow
pushButton.isHidden = true
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment