코드 베이스로 두가지 방법을 통해 UITabBar를 만들어봅시다.
먼저 스토리보드를 삭제하고 SceneDelegate에서 셋팅을 해줍니다.

1. 첫번째 방법
UITabBarController을 채택한 TabbarViewController로 넘어와서
viewDidLoad()에서 해당 TabBar에서 보여줄 VC를 만들어준다.

mainVC의 속성에 접근해서 TabBar를 셋팅해준다.

어떻게 바로 접근이 가능한건가요?
따로 설정해주는것은 없는데...
UIVIewCotroller에는 Extension으로 tabbarItem 프로퍼티가 있습니다.


그렇기 때문에
tabbarItem으로 접근해서 tabbar의 속성을 사용할 수 있습니다.
그리고 setViewControllers() 메서드를 사용해서 배열안에 만들어놓은 인스턴스를 넣고
그럼 화면이 로드 됐을때 하단에 보여집니다.


2. 두번째 방법
코드의 가독성을 위해 클로저를 활용해 봅니다.

클로저 안에 첫번재에서 사용했던 것을 똑같이 적어줍니다.
그리고 viewdidLoad()의 setViewControllers 배열에 추가해줍니다.

저는 이렇게 적용해보면서 두가지 궁금증이 생겼습니다.
- 1. 클로저에서 구현하는거랑 viewDidLoad()에서 구현하는거랑 무슨 차이가 있을까?
- 정답 : 시점의 차이!!
코드 베이스로 구성될 경우 클래스 안에서 프로퍼티가 먼저 생성이 되고
그 다음에 viewDidLoad()가 타는 것을 볼 수 있습니다 디버그를 찍어서 확인해보겠습니다.
- 정답 : 시점의 차이!!


큰 차이는 없지만 더 정확한것은 viewDidLoad()가 안에서 하는 것이 만드는것이다.
왜냐하면 viewdidLoad()가 실행될때 인스턴스가 만들어지고
함수가 종료가 되면 사라지기 때문에 더 효율적이다.
- 클로저 앞에 private은 왜 붙이는 것일까?
- 클래스 안에 프로퍼티로 만들었기 때문에
다른 클래스에서 불려질 수도 있다. 접근 제어자를 통해 TabVC에서만 사용 될 수 있도록 제한을 둔다.
- 클래스 안에 프로퍼티로 만들었기 때문에
이상 먼저해보고 대신해보는 아무개염 이었습니다.
'새싹' 카테고리의 다른 글
SPM으로 SnapKit을 추가하고 UIView를 상속받을때 Import Snapkit을 하지 않아도 되는 이유! (4) | 2023.08.29 |
---|---|
스토리보드 -> CodeBase 전환시 발생할 수 있는 오류 (Indicator편) (2) | 2023.08.28 |
iOS CustomView 만들때 super.init(frame: frame)만 가능한 이유 (0) | 2023.08.24 |
코드로 레이아웃 잡을 때 SnapKit leadingMargin vs leading 차이 (0) | 2023.08.22 |
오토레이아웃은 비율 중심으로 잡아라! (1) | 2023.08.21 |