일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- charts
- Storyboard
- ui
- modal
- 개발
- Chrats
- Apple
- 개발자
- library
- button
- kotlin
- cocoapods
- UIKit
- TableView
- ios
- Swift
- UITableView
- alamofire
- Python
- Chart
- 그래프
- Android
- 라이브러리
- UIButton
- PyQt
- PyQt5
- androidstudio
- Xcode
- graph
- 어플리케이션
Archives
- Today
- Total
Jiwift
[iOS/Swift] Enum을 사용한 TabBar Item 관리 본문
반응형
[iOS/Swift] Enum을 사용한 TabBar Item 관리
안녕하세요. 이번에는 Enum을 사용해서 TabBarViewController의 TabBarItem을 관리하는 방법을 소개하려고합니다. Storyboard를 사용하면 필요 없을 수도 있습니다.
그리고 더 좋은 방법이 있을 수 있습니다. 읽어보시다 별로면 새로운 방법을 추천해주세요.!!
저는 Storyboard 없이 코드 베이스로 작업을하고있었습니다.
import UIKit
class BaseTabBarController: UITabBarController, UITabBarControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .white
self.setTabBar()
self.delegate = self
}
private func setTabBar() {
// 각각의 아이템에 대한 ViewController 생성
self.viewControllers = [TabBarType.home.viewController,
TabBarType.stock.viewController,
TabBarType.analyze.viewController,
TabBarType.more.viewController]
self.tabBar.backgroundColor = .baseWhite
}
// 탭이 선택될 때 호출되는 메서드
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
Vibration.medium.vibrate()
}
}
위 코드는 제가 생성한 TabBarController입니다. 탭바를 사용하기 위해서는 ViewController를 연결해주어야합니다. 그래서 그걸 enum으로 묶어서 관리해보려고 생각했습니다. (그냥 TabBarController 클래스에서 생성해도 문제는 없어보이긴함..)
위 코드 중간에 setTabBar 함수에서 enum을 사용해서 viewcontroller를 설정하는 것을 볼 수 있습니다.
Enum 시작
case home
case vc1
case vc2
case more
enum의 case는 위 처럼 4가지를 설정하였습니다.
private var itemTitle: String {
switch self {
case .home:
return "홈"
case .vc1:
return "화면1"
case .vc2:
return "화면2"
case .more:
return "더보기"
}
}
private var itemImage: UIImage {
switch self {
case .home:
return UIImage(systemName: "house.fill")!
case .vc1:
return UIImage(systemName: "chart.bar.doc.horizontal.fill")!
case .vc2:
return UIImage(systemName: "chart.pie.fill")!
case .more:
return UIImage(systemName: "ellipsis")!
}
}
그리고 TabBar Item에서 사용할 Title과 이미지를 선언해주었습니다.
private var tabBarItem: UITabBarItem {
switch self {
case .home:
return UITabBarItem(title: self.itemTitle,
image: self.itemImage, selectedImage: nil)
case .vc1:
return UITabBarItem(title: self.itemTitle,
image: self.itemImage, selectedImage: nil)
case .vc2:
return UITabBarItem(title: self.itemTitle,
image: self.itemImage, selectedImage: nil)
case .more:
return UITabBarItem(title: self.itemTitle,
image: self.itemImage, selectedImage: nil)
}
}
그리고 이미지와 Title을 tabarItem에서 사용합니다.
var viewController: UIViewController {
switch self {
case .home:
let vc: HomeViewController = .init()
vc.tabBarItem = self.tabBarItem
return vc
case .vc1:
let vc: ViewController1 = .init()
vc.tabBarItem = self.tabBarItem
return vc
case .vc2:
let vc: ViewController2 = .init()
vc.tabBarItem = self.tabBarItem
return vc
case .more:
let vc: MoreViewController = .init()
vc.tabBarItem = self.tabBarItem
return vc
}
}
위에서 생성한 TabBarItem을 ViewController의 Item으로 설정합니다.
이렇게 한번 작성해두면 Enum만 수정하면 TabBarItem을 편하게 관리할 수 있습니다.
더 좋은 방법이 있으면 추천해주세요.!!
아래는 전체 코드입니다.
enum TabBarType {
case home
case vc1
case vc2
case more
var viewController: UIViewController {
switch self {
case .home:
let vc: HomeViewController = .init()
vc.tabBarItem = self.tabBarItem
return vc
case .vc1:
let vc: ViewController1 = .init()
vc.tabBarItem = self.tabBarItem
return vc
case .vc2:
let vc: ViewController2 = .init()
vc.tabBarItem = self.tabBarItem
return vc
case .more:
let vc: MoreViewController = .init()
vc.tabBarItem = self.tabBarItem
return vc
}
}
private var tabBarItem: UITabBarItem {
switch self {
case .home:
return UITabBarItem(title: self.itemTitle,
image: self.itemImage, selectedImage: nil)
case .vc1:
return UITabBarItem(title: self.itemTitle,
image: self.itemImage, selectedImage: nil)
case .vc2:
return UITabBarItem(title: self.itemTitle,
image: self.itemImage, selectedImage: nil)
case .more:
return UITabBarItem(title: self.itemTitle,
image: self.itemImage, selectedImage: nil)
}
}
private var itemTitle: String {
switch self {
case .home:
return "홈"
case .vc1:
return "화면1"
case .vc2:
return "화면2"
case .more:
return "더보기"
}
}
private var itemImage: UIImage {
switch self {
case .home:
return UIImage(systemName: "house.fill")!
case .vc1:
return UIImage(systemName: "chart.bar.doc.horizontal.fill")!
case .vc2:
return UIImage(systemName: "chart.pie.fill")!
case .more:
return UIImage(systemName: "ellipsis")!
}
}
}
반응형
'iOS Dev > Swift' 카테고리의 다른 글
[iOS/Swift] FCM 토픽 구독 해제 Swift 코드 (라이브러리X) (0) | 2024.07.15 |
---|---|
[iOS/Swift] 구조체를 JSON 형태로 변환하기 struct to json (1) | 2024.04.12 |
[iOS/Swift] 카메라 앨범 권한 요청하기 및 권한 확인, camera album permission check (0) | 2023.10.21 |
[iOS/Swift] Notification 권한 확인하는 코드 , Notification Permission Check (0) | 2023.10.20 |
[iOS/Swift] 특정 월을 기준으로 기간 범위 구하기, 연/월 날짜 범위 구하기 (0) | 2023.10.19 |