하아.....................................custom tabbar를 만들려고 했는데 너무 어려웠다.....
우선 공부를 하느라 시간이 꽤 소요되었고 + 방법이 다양해서 이것저것 해보다가 시간이 많이 지났는데, 일단 되긴 되었는데 사진처럼 계속 탭바 뒤에 뷰가 나왔다.. tabView.backgroundColor = .clear 로 지워도 소용이 없어서 샅샅이 찾아봤는데 어디에서 저 백그라운드를 정의한 곳이 없었다.

✔︎ 그러다문득, 아맞다.. **UITabBar**로 지정해 놓았던 것 생각나서 class를 다시 지워주니까 해결됐다.


ㅎ.. 그치.. 또 내가 잘못했지..


class TabViewController: UIViewController {
@IBOutlet weak var tabBarBackgroundView: UIView!
//현재 선택한 버튼: 이곳에서 저장한 것이 어플의 초기 화면이 된다.
var selectedIndex: Int = 0
var previousIndex: Int = 0
// VC들을 담을 배열
var vcList = [UIViewController]()
// (탭바이템으로 사용될) 버튼들을 담을 배열
@IBOutlet var buttons:[UIButton]!
@IBOutlet var tabView:UIView!
let mainVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: ViewController.identifier)
let cameraVC = UIStoryboard(name: "Camera", bundle: nil).instantiateViewController(withIdentifier: CameraViewController.identifier)
let calendarVC = UIStoryboard(name: "Calendar", bundle: nil).instantiateViewController(withIdentifier: CalendarViewController.identifier)
override func viewDidLoad() {
super.viewDidLoad()
tabBarBackgroundView.cornerRounded(cornerRadius: tabBarBackgroundView.frame.size.height / 2)
// VC배열에 넣기
vcList = [mainVC, cameraVC, calendarVC]
// 첫 뷰 불러오기
buttons[selectedIndex].isSelected = true
tabChanged(sender: buttons[selectedIndex])
}
}
// MARK: - Actions
extension TabViewController {
@IBAction func tabChanged(sender:UIButton) {
previousIndex = selectedIndex
selectedIndex = sender.tag
buttons[previousIndex].isSelected = false
let previousVC = vcList[previousIndex]
// 아래를 적지 않으면, 기존에 호출한 뷰들이 계속 유지된다
// 기존에 선택되어있던 VC와의 관계성을 끊는다.
previousVC.willMove(toParent: nil)
previousVC.view.removeFromSuperview()
previousVC.removeFromParent()
// 새로 선택된 버튼과 연결하기
sender.isSelected = true
*//....?*
let vc = vcList[selectedIndex]
vc.view.frame = UIApplication.shared.windows[0].frame
vc.didMove(toParent: self)
self.addChild(vc)
self.view.addSubview(vc.view)
self.view.bringSubviewToFront(tabView)
}
}
❗️알아야할 것
// 기존의 뷰 지우기
// childVC삭제될 거라고 알려줌
previousVC.willMove(toParent: nil)
previousVC.view.removeFromSuperview()
// parentVC와의 관계 끊음
previousVC.removeFromParent()
이 코드를 적지 않고 빌드를 한 후에 여러 화면을 클릭하면.. 아래와 같이 기존에 누른 화면이 유지된다.

