티스토리 뷰

반응형

 

 

오늘도 부스트코스 과제를 수행하면서 배운 꿀팁들을 하나 공유합니다. 오늘은 탭바컨트롤러 델리게이트함수의 활용을 통해 각 탭바컨트롤러의 네비게이션컨트롤러 및 뷰컨트롤러를 전환시키는 방법을 공유합니다. 

TabBarController 메뉴 아이템 선택을 했을때를 반응하여 원하는대로 뷰컨트롤러 전환을 처리하는 방법입니다. 먼저 이런 처리과정이 필요한 예시를 소개하겠습니다. 

 

 

위와 같이 테이블뷰가 있습니다. 위의 앱은 탭바컨트롤러로 2개의 메뉴아아템이 있습니다. 좌측아이템버튼은 NavigationController를 낀 TableView가, 우측아이템버튼은 역시 NavigationController를 낀 CollectionView가 있는 형태입니다. 

 

 

 

 

특정 영화정보가 담긴 셀을 누르면 세부정보가 나옵니다. 이상태에서 우측 탭바아이템을 선택해보겠습니다.

 

 

 

 

위와 같이 컬렉션뷰가 나오겠지요. 자, 이곳에서도 셀 하나를 선택해봅니다. "신과함께-죄와벌" 을 선택해볼게요.

 

 

 

위와 같이 신과함께 영화 정보가 나옵니다. 자 근데 이상태에서 탭바 좌측아이템을 선택해보면? 

 

 

 

 

위와같이 그대로 저스티스리그에 대한 세부정보 뷰가 띄워집니다. 무언가 탭바메뉴 두개가 따로 노는 기분이랄까요? 저는 이 경우, 즉 탭바메뉴를 클릭했을때, 메인화면뷰컨트롤러가 아닐경우 메인뷰컨트롤러로 전환시켜 보겠습니다. 

 

이 문제를 해결하는 방법은 TabBarController의 Delegate메서드를 사용해서 탭바메뉴를 클릭 시의 반응을 처리하는 것입니다. 

 

 

 

 

먼저 탭바컨트롤러의 클래스를 작성해줍니다. 또한 UITabBarControllerDelegate 프로토콜을 채택합니다. 탭바아이템을 선택했을때 반응하는 메서드를 사용하기 위해서입니다.

 

 

 

 

해당 TabBarController가 delegate를 사용하도록 viewDidLoad메서드에 self.delegate = self 를 추가했구요.

 

 

메뉴아이템을 선택했을 때 호출되는 Delegate Method, 

overrided func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) 메서드를 사용합니다. 

 

선택된 탭바메뉴아이템의 인덱스를 참고해서 보여질 뷰컨트롤러의 Imbed된 NavigationController 인스턴스를 받아옵니다. 그 뒤, 문제없이 해당 NavigationController의 인스턴스를 받아왔다면 popToRootViewController(animated:)를 사용해서 해당 NavigationController의 맨 초기 화면으로 전환시킬 수 있습니다. 

이로써 탭바컨트롤러를 사용함에 있어 좌측, 우측 두개의 탭바아이템의 뷰컨트롤러가 따로 노는듯한 부분을 해소할 수 있게 되었습니다. 

 

 

더디지만 조금씩 부스트코스 5번째과제 완성에 다가가고 있는데요. 사실 완성을 한 뒤에도 지저분한 부분이 많아 정리가 많이 필요할 것 같습니다. 추후에도 좋은 팁이 생기면 자주 포스팅 올리겠습니다.

그럼 이만, 즐코딩하시기 바랍니다 ^-^//

 

▼부스트코스 5번째 과제 진행과정 190405

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함