배경
아래 사진들을 보시면 프로필 화면에서 각각 닉네임 화면과 연락처 화면으로 이동하는 것을 알 수 있습니다.
이처럼 오늘은 한 화면에서 여러 화면으로 이동하려고 할 때 어떻게 관리해주면 될지 알아보도록 하겠습니다.
구현 방법
구현 방법은 아주 간단합니다. 바로 NavigationLink의 tag와 selection을 이용하면 되는데요.
구현 코드는 아래와 같습니다.
struct ContentView: View {
@State private var selection: String? = nil
var body: some View {
NavigationView {
List {
NavigationLink("1", tag: "1", selection: $selection) {
Text("View 1")
}
NavigationLink("2", tag: "2", selection: $selection) {
Text("View 2")
}
NavigationLink("3", tag: "3", selection: $selection) {
Text("View 3")
}
}
.navigationTitle("Home")
}
}
}
위 코드 동작에 대해 간단히 하자면 각 tag 값에 Hashable한 값을 할당한 후, selection 값이 각 tag 값과 일치하면 그 해당 화면으로 이동하는 매커니즘입니다.
원래 화면으로 되돌아 가는 방법
원래 화면으로 되돌아 가는 방법도 엄청 간단합니다. 일단 아래 코드부터 확인해보겠습니다.
struct DetailView: View {
let title: String
// 1
@Binding var selection: String?
var body: some View {
Button("Dismiss") {
// 2
selection = nil
}
.navigationTitle(title)
}
}
역시나 많은 코드가 필요하지 않습니다. 위 코드에 대해 간단히 설명하자면 상위뷰에서 selection에서 대한 정보를 바인딩해주고, 이 selection 바인딩에 nil을 할당해주면 원래 화면으로 되돌아 갈 수 있습니다.
그리고 참고사항으로 상위뷰에서의 코드 구현은 다음과 같습니다.
struct ContentView: View {
@State private var selection: String? = nil
var body: some View {
NavigationView {
List {
NavigationLink("1", tag: "1", selection: $selection) {
DetailView(title: "View 1", selection: $selection) // selection 바인딩
}
NavigationLink("2", tag: "2", selection: $selection) {
DetailView(title: "View 2", selection: $selection)
}
NavigationLink("3", tag: "3", selection: $selection) {
DetailView(title: "View 3", selection: $selection)
}
}
.navigationTitle("Home")
}
}
}
마무리
비루한 글이지만 읽어주셔서 감사합니다.
참고 사이트
https://sarunw.com/posts/how-to-pop-view-from-navigation-view-in-swiftui/
'TIL' 카테고리의 다른 글
[TIL] SwiftUI에서 네트워크 단절 대응 구현기 (0) | 2024.06.25 |
---|---|
[TIL] @AppStorage Custom Property Wrapper로 전환기 (0) | 2024.06.17 |
[TIL] 애플 소셜 로그인 구현기 (0) | 2024.06.13 |
[TIL] 카카오 소셜 로그인 구현 (0) | 2024.06.13 |
[TIL] Keychain 적용기 (0) | 2024.06.13 |