@@ -11,36 +11,34 @@ import EATSSUDesign
11
11
import EATSSUKit
12
12
13
13
class RootTabBarViewController : UITabBarController {
14
+ private let userDepartmentService = UserDepartmentService ( )
15
+
14
16
override func viewDidLoad( ) {
15
17
super. viewDidLoad ( )
16
18
delegate = self
17
19
setupTabBar ( )
18
20
}
19
21
20
- // RootTabBarViewController.swift 수정 내용 (setupTabBar 메서드 내)
21
22
private func setupTabBar( ) {
22
- // 탭바 인스턴스를 ESTabBar로 교체
23
+ // 기존 탭바를 커스텀 탭바로 교체
23
24
tabBar. removeFromSuperview ( )
24
25
let estTabBar = ESTabBar ( )
25
- // KVC를 사용하여 탭바 교체, 프레임워크에서 제공하는 탭바를 제거하고 커스텀 탭바를 컨트롤러에 등록
26
- // forKey 값의 tabBar는 탭바를 변경하기 위한 프레임워크에서 예약된 키값
27
26
setValue ( estTabBar, forKey: " tabBar " )
28
27
29
- // 기존 코드 유지
30
- let homeViewController = HomeViewController ( )
31
- let searchViewController = MapViewController ( )
32
- let mypageViewController = MyPageViewController ( hasAccessToken: RealmService . shared. isAccessTokenPresent ( ) )
28
+ // 각 탭에 해당하는 뷰 컨트롤러 생성 및 네비게이션 컨트롤러 래핑
29
+ let homeVC = HomeViewController ( )
30
+ let mapVC = MapViewController ( )
31
+ let mypageVC = MyPageViewController ( hasAccessToken: RealmService . shared. isAccessTokenPresent ( ) )
33
32
34
- let homeNav = UINavigationController ( rootViewController: homeViewController )
35
- let mapNav = UINavigationController ( rootViewController: searchViewController )
36
- let mypageNav = UINavigationController ( rootViewController: mypageViewController )
33
+ let homeNav = UINavigationController ( rootViewController: homeVC )
34
+ let mapNav = UINavigationController ( rootViewController: mapVC )
35
+ let mypageNav = UINavigationController ( rootViewController: mypageVC )
37
36
38
37
homeNav. tabBarItem = UITabBarItem ( title: " 학식 " , image: UIImage ( systemName: " fork.knife " ) , tag: 0 )
39
38
mapNav. tabBarItem = UITabBarItem ( title: " 지도 " , image: UIImage ( systemName: " map.fill " ) , tag: 1 )
40
39
mypageNav. tabBarItem = UITabBarItem ( title: " 마이 " , image: UIImage ( systemName: " person.fill " ) , tag: 2 )
41
40
42
41
viewControllers = [ homeNav, mapNav, mypageNav]
43
-
44
42
tabBar. tintColor = EATSSUDesignAsset . Color. Main. primary. color
45
43
tabBar. backgroundColor = . white
46
44
}
@@ -61,28 +59,48 @@ extension RootTabBarViewController: UITabBarControllerDelegate {
61
59
#if DEBUG
62
60
print ( " 홈 탭이 선택되었습니다. " )
63
61
#endif
62
+
64
63
case 1 :
65
64
#if DEBUG
66
65
print ( " 제휴지도 탭이 선택되었습니다. " )
67
66
#endif
68
67
69
- if userEnteredDepartmentInfo ( ) {
70
- // 학과 정보가 입력된 경우 기존 로직 수행
71
- } else {
72
- // 학과 정보가 입력되지 않은 경우 모달 시트 표시
73
- presentDepartmentInfoModal ( )
68
+ // 비동기적으로 학과 정보 입력 여부 확인
69
+ userEnteredDepartmentInfo { [ weak self] isEntered in
70
+ DispatchQueue . main. async {
71
+ if isEntered {
72
+ // 학과 정보가 입력된 경우, 기존 로직 실행
73
+ // 예: 해당 탭의 뷰 컨트롤러로 전환 등 추가 로직
74
+ } else {
75
+ self ? . presentDepartmentInfoModal ( )
76
+ }
77
+ }
74
78
}
79
+
75
80
case 2 :
76
81
#if DEBUG
77
82
print ( " 마이페이 탭이 선택되었습니다. " )
78
83
#endif
79
84
handleMyPageTabSelected ( )
85
+
80
86
default :
81
87
fatalError ( " 선택될 수 없는 탭이 선택됨. " )
82
88
}
83
89
}
84
90
85
- /// 학과 정보 입력 여부에 따라 모달 시트를 표시하는 메서드
91
+ /// 학과 정보 입력 여부를 비동기적으로 확인하는 메서드
92
+ private func userEnteredDepartmentInfo( completion: @escaping ( Bool ) -> Void ) {
93
+ userDepartmentService. validateDepartment { result in
94
+ switch result {
95
+ case let . success( isEntered) :
96
+ completion ( isEntered)
97
+ case . failure:
98
+ completion ( false )
99
+ }
100
+ }
101
+ }
102
+
103
+ /// 학과 정보 입력이 되어있지 않은 경우 모달 시트를 표시하는 메서드
86
104
private func presentDepartmentInfoModal( ) {
87
105
let modalVC = DepartmentInfoRequestModalViewController ( )
88
106
modalVC. modalPresentationStyle = . pageSheet
@@ -103,12 +121,7 @@ extension RootTabBarViewController: UITabBarControllerDelegate {
103
121
present ( modalVC, animated: true )
104
122
}
105
123
106
- /// 사용자가 학과 정보를 입력했는지 확인 (임시 로직)
107
- private func userEnteredDepartmentInfo( ) -> Bool {
108
- // TODO: 서버에서 사용자의 학과 정보 조회 로직 설계
109
- false
110
- }
111
-
124
+ /// 마이 페이지 탭 선택 시 로그인 여부에 따라 로직을 분기하는 메서드
112
125
private func handleMyPageTabSelected( ) {
113
126
if RealmService . shared. isAccessTokenPresent ( ) {
114
127
#if DEBUG
@@ -118,7 +131,8 @@ extension RootTabBarViewController: UITabBarControllerDelegate {
118
131
presentLoginAlert ( )
119
132
}
120
133
}
121
-
134
+
135
+ /// 로그인이 필요한 경우 확인 알림을 표시하는 메서드
122
136
private func presentLoginAlert( ) {
123
137
AlertControllerHelper . showConfirmOnlyAlert (
124
138
title: " 로그인이 필요한 서비스입니다. " ,
@@ -130,6 +144,7 @@ extension RootTabBarViewController: UITabBarControllerDelegate {
130
144
}
131
145
}
132
146
147
+ /// 로그인 뷰 컨트롤러로 전환하는 메서드
133
148
private func changeIntoLoginVC( ) {
134
149
let loginViewController = LoginViewController ( )
135
150
WindowManageHelper . replaceWindowViewControllerWith ( loginViewController)
0 commit comments