Container View Controllers는 다른 뷰 컨트롤러들을 하나의 working interface로 결합해주는 뷰 컨트롤러이다.
setViewControllers
메소드에서 화면에 보여주고 싶은 뷰 컨트롤러를 지정utils 폴더에 새 스위프트 파일을 만들고 다음과 같이 코드를 작성한다.
import UIKit
extension UIViewController {
func setStatusBar() {
let statusBarSize = UIApplication.shared.statusBarFrame.size // deprecated but OK
let frame = CGRect(origin: .zero, size: statusBarSize)
let statusbarView = UIView(frame: frame)
statusbarView.backgroundColor = appColor
view.addSubview(statusbarView)
}
func setTabBarImage(imageName: String, title: String) {
let configuration = UIImage.SymbolConfiguration(scale: .large)
let image = UIImage(systemName: imageName, withConfiguration: configuration)
tabBarItem = UITabBarItem(title: title, image: image, tag: 0)
}
}
setStatusBar
: status bar의 색상 설정setTabBarImage
: 탭 바의 아이콘 이미지 설정MainViewController.swift
파일을 만들고 아래와 같이 코드를 작성한다.
import UIKit
class MainViewController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
setupViews()
setupTabBar()
}
private func setupViews() {
let summaryVC = AccountSummaryViewController()
let moneyVC = MoveMoneyViewController()
let moreVC = MoreViewController()
summaryVC.setTabBarImage(imageName: "list.dash.header.rectangle", title: "Summary")
moneyVC.setTabBarImage(imageName: "arrow.left.arrow.right", title: "Move Money")
moreVC.setTabBarImage(imageName: "ellipsis.circle", title: "More")
let summaryNC = UINavigationController(rootViewController: summaryVC)
let moneyNC = UINavigationController(rootViewController: moneyVC)
let moreNC = UINavigationController(rootViewController: moreVC)
summaryNC.navigationBar.barTintColor = appColor
hideNavigationBarLine(summaryNC.navigationBar)
let tabBarList = [summaryNC, moneyNC, moreNC]
viewControllers = tabBarList
}
private func hideNavigationBarLine(_ navigationBar: UINavigationBar) {
let img = UIImage()
navigationBar.shadowImage = img
navigationBar.setBackgroundImage(img, for: .default)
navigationBar.isTranslucent = false
}
private func setupTabBar() {
tabBar.tintColor = appColor
tabBar.isTranslucent = false
}
}
class AccountSummaryViewController: UIViewController {
override func viewDidLoad() {
view.backgroundColor = .systemGreen
}
}
class MoveMoneyViewController: UIViewController {
override func viewDidLoad() {
view.backgroundColor = .systemOrange
}
}
class MoreViewController: UIViewController {
override func viewDidLoad() {
view.backgroundColor = .systemPurple
}
}
MainViewController에서 탭 바와 관련된 세팅이 이루어진다.
setTabBarImage
에서 사용된 imageName은 SF Symbols 이미지의 이름이다.
mainViewController.selectedIndex = 1
탭 바 컨트롤러의 selectedIndex
프로퍼티를 이용해서 설정할 수 있다.