하아.....................................custom tabbar를 만들려고 했는데 너무 어려웠다.....

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

IMG_1017.PNG

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

Untitled

IMG_1018.PNG

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

manbo03.png

✍️ Custom TabBar를 이용한 화면 전환 구현하기

1. 탭바 화면으로 이용할 스토리보드를 만들어준 후, 탭바를 만든다.

Untitled

2. TabViewController 연결

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()

이 코드를 적지 않고 빌드를 한 후에 여러 화면을 클릭하면.. 아래와 같이 기존에 누른 화면이 유지된다.

Untitled

Untitled