Search
➡️

6. [No StoryBoard] Navigation Controller 추가하기

안녕하세요~ iOS 개발자 루크입니다
스토리보드없이 코딩하기 제 5탄 네비게이션컨트롤러편입니다
본 포스팅은 이전 포스팅과 이어지는 포스팅입니다 참고해주세요!
이전 포스팅에서 우리는 탭바 컨트롤러를 만들어보았습니다.
탭바 컨트롤러와 네비게이션 컨트롤러를 동시에 사용해야 하는 경우에는 어떻게 해야할까요?
설명 시작합니다 ㅎ

네비게이션 컨트롤러 인스턴스 생성

let nav = UINavigationController(rootViewController: rootViewController) nav.tabBarItem.image = UIImage(named: "home_unselected") // 탭바 아이템 이미지 추가 nav.navigationBar.barTintColor = .white nav.navigationBar.backgroundColor = .white
Swift
복사
먼저 UINavigationController 의 인스턴스를 생성해줍니다.
이때 rootViewController 에는 각 tab 에 들어갈 ViewController 인스턴스를 넣어주면 됩니다.
그러곤 네비게이션 바에 대한 여러가지 초기 설정을 진행해줍니다.

탭 바에 추가.

그러곤 이전 포스팅에서 했던 것 처럼
UITabBarController 의 viewControllers 프로퍼티에 이렇게 생성한 네비게잇녀 컨트롤러의 인스턴스를 넣어줍니다.
viewControllers = [nav]
Swift
복사

모든 Tab 에 대해 반복 수행

위 코드를 각각의 tab에 대해 수행해주고 viewControllers 프로퍼티에 어레이로 전달해줍니다.
viewControllers = [nav1, nav2, nav3, nav4]
Swift
복사

보일러 플레이트 코드 문제 해결하기

다만 이렇게되면 중복되는 코드가 너무 많아집니다
따라서 헬퍼 함수를 하나 정의해서 중복 코드를 줄여보겠습니다.
// 좋은 프로그래머가 되기 위해서는 중복코드를 피해야한다. func templateNavigationController(image: UIImage?, rootViewController: UIViewController) -> UINavigationController { let nav = UINavigationController(rootViewController: rootViewController) nav.tabBarItem.image = image nav.navigationBar.barTintColor = .white nav.navigationBar.backgroundColor = .white return nav }
Swift
복사
이렇게 템플릿이 되는 함수를 정의해주고 각각의 탭에 대해 함수를 호출해 주겠습니다.

최종

func configureViewControllers() { let feed = FeedController() let nav1 = templateNavigationController(image: UIImage(named: "home_unselected"), rootViewController: feed) let explore = ExploreController() let nav2 = templateNavigationController(image: UIImage(named: "search_unselected"), rootViewController: explore) let notification = NotificationController() let nav3 = templateNavigationController(image: UIImage(named: "like_unselected"), rootViewController: notification) let conversation = ConversationController() let nav4 = templateNavigationController(image: UIImage(named: "ic_mail_outline_white_2x-1"), rootViewController: conversation) viewControllers = [nav1, nav2, nav3, nav4] }
Swift
복사
다만 이렇게 하면 네비게이션 컨트롤러의