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 |
Tags
- widget
- dispatchqueue
- uikit
- 1일1알골
- 대외활동
- 리액트
- Protocol
- 운영체제
- 멋사
- 알고리즘
- SwiftUI
- spritekit
- composable architecture
- Swift
- 네트워크
- TCA
- 문법
- 스위프트
- 위젯킷
- 컴퓨터그래픽스
- 후기
- widgetkit
- 멋쟁이사자처럼
- 영남대
- cs
- swift concurrency
- 스유
- 웹
- c++
- 백준
Archives
- Today
- Total
맛동산이
SwiftUI) 화면전환 하는 방법들, NavigationLink, TabView, Sheet, Dismiss 본문
SwiftUI에서 기본적으로 제공하는 화면전환 방식은 기존의 UIKit과 동일하게 Naviagtion, Tap 그리고 sheet가 있다. 즉 present방식과, push방식이 있다는 말이다.
1. NavigationLink를 이용한 화면 이동
NavigationLink를 사용하면, 버튼이나 텍스트 등을 탭하여 다른 뷰로 이동할 수 있다.
해당방식은 Push이다.
예시코드
swiftCopy code
struct ContentView: View {
var body: some View {
NavigationView {
VStack {
NavigationLink(destination: DetailView()) {
Text("Go to Detail View")
}
}
}
}
}
struct DetailView: View {
var body: some View {
Text("This is the Detail View")
}
}
2. TabView를 이용한 탭 기반 화면 전환
TabView를 사용하면 여러 개의 탭으로 구성된 화면을 구현할 수 있다.
예시코드
swiftCopy code
struct ContentView: View {
var body: some View {
TabView {
Text("First Tab")
.tabItem {
Image(systemName: "1.circle")
Text("First")
}
Text("Second Tab")
.tabItem {
Image(systemName: "2.circle")
Text("Second")
}
}
}
}
3. Sheet를 이용한 모달 화면 표시
Sheet를 사용하면, 다른 뷰 위에 모달 형태로 화면을 띄울 수 있다.
예시코드
swiftCopy code
struct ContentView: View {
@State var isPresented = false
var body: some View {
Button(action: {
self.isPresented.toggle()
}) {
Text("Show Modal View")
}
.sheet(isPresented: $isPresented) {
ModalView()
}
}
}
struct ModalView: View {
var body: some View {
Text("This is a modal view")
}
}
Sheet는 모달방식으로 띄우기 때문에 해당 시트를 모디파이어 를 이용해서 바꾼다던지 하게 되면, 다양한 방식의 뷰를 처리할수 있을것 같다.
또한 Sheet는 기존의 fullScreen 형태가 아니기 때문에 동일한 방식이지만, FullScreen방식을 하기 위해서는
.fullScreenCover()
를 사용하면 된다.
4. ZStack을 이용한 방법
ZStack을 사용하면, 여러 개의 뷰를 겹쳐서 표시할 수 있다. 이를 이용하여 화면 전환을 구현할 수 있다.
예를 들어, 다음과 같이 코드를 작성할 수 있다.
swiftCopy code
struct ContentView: View {
@State var showDetail = false
var body: some View {
ZStack {
if showDetail {
DetailView(showDetail: self.$showDetail)
} else {
VStack {
Button(action: {
self.showDetail = true
}) {
Text("Show Detail View")
}
}
}
}
}
}
struct DetailView: View {
@Binding var showDetail: Bool
var body: some View {
VStack {
Text("This is the Detail View")
Button(action: {
self.showDetail = false
}) {
Text("Dismiss")
}
}
}
}
5. Present방식의 뷰를 Dismiss하는법
struct ModalView: View {
@Environment(\\.dismiss) var dismiss
var body: some View {
Text("This is a modal view").onTapGesture {
dismiss()
}
}
}
@Environment를 통해서 dismiss변수로 dismiss를 구현하면 사용이 가능하다.
반응형
'앱 > SwiftUI' 카테고리의 다른 글
SwiftUI) ObservableObject, ObservedObject, SateObject, Published 에 관하여 (0) | 2023.07.05 |
---|---|
SwiftUI) GeometryReader에 대해서 알아보자 (0) | 2023.07.05 |
SwiftUI) LazyVStack과 VStack (0) | 2023.04.12 |
SwiftUI) some View?? Opaque Type과 some키워드에 관해서 (0) | 2023.04.12 |
SwiftUI) SwiftUI View가 Struct인 이유에 관해 (0) | 2023.04.12 |