본문 바로가기
iOS

[SwiftUI] Environment value : dismiss (NavigationStack에서 뷰 닫기)

by SiO2whocode 2024. 12. 26.
728x90

SwiftUI에서 NavigationStack를 사용하면서 화면전환을 하는데, back button을 커스터마이징 하면서,

현재 나타나고 있는 뷰를 닫고 전으로 돌아가야 하는, 즉 네비게이션 스택에서 현재 뷰를 삭제해야하는 액션이 필요했다.

이때 주로 해당 뷰에 Environment 값으로 dismiss를 선언해서 사용하는데, 생소해서 공식 문서를 참고하면서 내용을 번역해서 정리해두었다. 아래 공식 문서 참고

https://developer.apple.com/documentation/swiftui/environmentvalues/dismiss

 

dismiss | Apple Developer Documentation

An action that dismisses the current presentation.

developer.apple.com

 

Dismiss environment value는

DismissAction을 수행하고 싶을 때 사용하는 환경 값?(Environment value).

자세히 말하면 현재 환경(파일, struct?, 뷰?)의 DismissAction 인스턴스를 얻기 위해 사용.

 

이걸 사용하는 경우는 크게 두가지 예시가 있는데

  • sheet나 popover 뷰 같은 modal 창을 닫는 데 사용
  • navigationStack에서 현재 나타나고 있는 뷰를 닫을 때(지울 때) 사용
private struct SheetContents: View {
    @Environment(\\.dismiss) private var dismiss

    var body: some View {
        Button("Done") {
            dismiss()
        }
    }
}

 

예를들면 위의 코드와 같이 사용 (공식문서 제공)

  • 주의! dismiss 환경변수는 반드시 지울 뷰 안에 선언해서 사용해야 한다.
  • 또한, dismiss 환경 변수는 현재 보여지고 있는 뷰에 대해서만 영향을 미칠 수 있다.
    따라서 해당 뷰가 보여지는지 isPresented 변수를 통해 확인해서 쓰는 것도 한 방법
728x90