반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Realtime Database
- Java
- Observable
- string
- 라이트모드
- 문자열
- RxSwift
- ios
- NavigationLink
- LazyHStack
- Apple
- UIButton
- swipe
- gcd
- Swift
- 다크모드
- autolayout
- 웹뷰
- Firebase
- SwiftLint
- WebView
- UIScrollView
- github
- SwiftUI
- Alamofire
- subscript
- Android
- UITabBarController
- dictionary
- remote config
Archives
- Today
- Total
점진적 과부하 개발 블로그
Swift) UITabBarController와 TabView의 차이점 본문
반응형
UITabBarController와 TabView의 차이점
코드 비교
- UIKit
import UIKit
class FirstViewController: UIViewController {}
class SecondViewController: UIViewController {}
class TabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
let firstViewController = FirstViewController()
firstViewController.tabBarItem = UITabBarItem(
title: "첫번째 화면",
image: UIImage(systemName: "person"),
tag: 0
)
let secondViewController = SecondViewController()
secondViewController.tabBarItem = UITabBarItem(
title: "두번째 화면",
image: UIImage(systemName: "person"),
tag: 1
)
viewControllers = [firstViewController, secondViewController]
}
}
- SwiftUI
import SwiftUI
struct FirstView: View {
var body: some View {
Text("첫번째 탭")
}
}
struct SecondView: View {
var body: some View {
Text("두번째 탭")
}
}
struct SampleTabView: View {
var body: some View {
TabView {
FirstView()
.tabItem {
Image(systemName: "person")
Text("첫번째 화면")
}
SecondView()
.tabItem {
Image(systemName: "person")
Text("두번째 화면")
}
}
}
}
- 두 코드를 비교해보면 SwiftUI가 UIKit에 비해 좀 더 직관적이고 읽는 순서대로 구현이 되어 알아보기 쉽다.
TabView 구현
import SwiftUI
struct MainTabView: View {
var body: some View {
TabView {
Text("Home") // 각각 넣으면 유지보수의 어려움이 있기 때문에 별도의 enum으로 정의를 해둔다.
.tabItem {
Image(systemName: "house.fill")
Text("Home")
}
Text("Ohter")
.tabItem {
Image(systemName: "ellipsis")
Text("Other")
}
}
}
}
struct MainTabView_Previews: PreviewProvider {
static var previews: some View {
MainTabView()
}
}
- 이렇게 바로 TabView에 각각 넣는 코드는 유지보수에 그닥 좋지 못해서 따로 enum을 정의해서 tabItem을 넣어주겠습니다.
import SwiftUI
enum Tab {
case home
case other
// associate value : enum의 변수를 바로 리턴 시키는 것
var tabTextItem: Text {
switch self {
case .home: return Text("Home")
case .other: return Text("Other")
}
}
var imageItem: Image {
switch self {
case .home: return Image(systemName: "house.fill")
case .other: return Image(systemName: "ellipsis")
}
}
}
struct MainTabView: View {
var body: some View {
TabView {
Text("Home") // 각각 넣으면 유지보수의 어려움이 있기 때문에 별도의 enum으로 정의를 해둔다.
.tabItem {
Tab.home.imageItem
Tab.home.tabTextItem
}
Text("Ohter")
.tabItem {
Tab.other.imageItem
Tab.other.tabTextItem
}
}
}
}
struct MainTabView_Previews: PreviewProvider {
static var previews: some View {
MainTabView()
}
}
- enum은 따로 swift 파일을 만들어 넣어주면 더 깔끔한 코드를 작성할 수 있다.
반응형
'Swift' 카테고리의 다른 글
Swift HStack (0) | 2022.06.12 |
---|---|
Swift List, LazyHStack 차이점 알아보기 (0) | 2022.06.10 |
Swift UnitTest, Nimble 알아보기 (0) | 2022.06.06 |
Swift Kakao API 연결하기 (0) | 2022.06.02 |
Swift MVVM 알아보기 (0) | 2022.05.29 |