SwiftUI의 TabView에 대해서 공부해보자:)
dqQQQ
·2023. 11. 29. 15:38
개요
SwiftUI에서 TabView에 대해서 알아보고 사용법을 익혀보겠다.
TabView
struct TabView<SelectionValue, Content> where SelectionValue : Hashable, Content : View
탭뷰는 상호작용하는 UI 요소들을 사용한 여러개의 자식뷰들을 서로 스위칭 할 수 있는 뷰이다.
간단하게 탭창으로 여러개의 뷰를 전환할 수 있는 뷰이다. UIKit에서는 UITabBarController인듯
UI를 탭으로 구성하기 위해서 tabItem modifier를 TabView에 적용한다.
badge
로 각각의 탭에 알림을 띄울 수 있다.
TabView {
ReceivedView()
.badge(2)
.tabItem {
Label("Received", systemImage: "tray.and.arrow.down.fill")
}
SentView()
.tabItem {
Label("Sent", systemImage: "tray.and.arrow.up.fill")
}
AccountView()
.badge("!")
.tabItem {
Label("Account", systemImage: "person.crop.circle.fill")
}
VStack {
Text("예시 탭뷰")
.font(.largeTitle)
Image(systemName: "Swift")
} .tabItem {
Image(systemName: "person")
Text("예시 탭")
}
}
위의 예시는 공식문서 예시로 뷰를 하나 만든거에 modifier를 붙였다. 그래서 뷰 따로 안만들고 뷰 뒤에 바로 붙여보겠다.
탭 아이템은 Label을 사용하거나 이미지, 텍스트를 원하는 방식으로 구성하면된다.
작동방식으로 탭 아이템이 각각의 뷰와 1대1로 연결된 것처럼 보이지만 사실은 아니다.
특정 뷰에 modifier로 연결된 방식이 아니라 탭뷰에 순서로 연결된다.
그래서 뷰를 3개만들었는데 탭 아이템을 2개만 만들면 마지막것이 안나온다.
Tag
내가 어떤 탭에 있는지 확인할 때 사용한다.
탭뷰의 제네릭 SelectionValue를 관리하는 생성자를 사용해 탭뷰를 만든 뒤 각 탭별로 .tag(SelectionValue)
를 넣어주면 된다.
enum TabItems {
case A, B, C
}
@State private var selected = TabItems.A
var body: some View {
TabView(selection: $selected) {
Text("A 뷰")
.tag(TabItems.A)
.tabItem { Image(systemName: "a.circle").imageScale(.large) }
Text("B 뷰")
.tag(TabItems.B)
.tabItem { Image(systemName: "b.circle").imageScale(.large) }
Text("C 뷰")
.tag(TabItems.C)
.tabItem { Image(systemName: "c.circle").imageScale(.large) }
}
}
탭 색깔 변경
지금은 accentColor로 한다는데 없어진단다.
tint 아니면 asset의 accent color를 사용하란다.
위에 탭 뷰 만들기
탭 뷰를 위에 만들고 싶었다.
아무리 찾아봐도 안나온다.
그래서 ViewRouter 만들고 버튼으로 탭뷰 역할을 하도록 했다.
이게 맞나..??
import Foundation
import Combine
import SwiftUI
class ViewRouter : ObservableObject{
let objectWillChange = PassthroughSubject<ViewRouter,Never>()
var currentPage: String = "page1" {
didSet{
objectWillChange.send(self)
}
}
}
버튼들
~~~
~~~
Spacer()
if viewRouter.currentPage == "page1" {
SubView(viewRouter: viewRouter)
}
else if viewRouter.currentPage == "page2"{
SubView2(viewRouter: viewRouter)
}
'SwiftUI' 카테고리의 다른 글
SwiftUI에서 picker를 공부해보자:) (0) | 2023.11.29 |
---|---|
SwiftUI에서 제스쳐를 공부해보자:) (0) | 2023.11.29 |
SwiftUI의 애니메이션에 대해서 공부해보자:) (0) | 2023.11.29 |
SwiftUI의 ViewModifier에 대해 알아보자:) (0) | 2023.11.29 |
SwiftUI에서의 에러들의 해결방법을 알아보자:) (0) | 2023.11.29 |