iOS/SwiftUI
[SwiftUI] @Environment(\.presentationMode) 사용해서 간편하게 View dismiss 하기
crazydeer
2024. 3. 11. 11:40
반응형
https://developer.apple.com/documentation/swiftui/presentationmode
PresentationMode | Apple Developer Documentation
An indication whether a view is currently presented by another view.
developer.apple.com
NavigationBar에 topLeading 위치에 toolbar로 뒤로가기 이미지를 추가한 후
버튼 이벤트를 간단히 추가하는 방법이 있습니다.
import SwiftUI
public struct SampleView: View {
@State var title: String = "안녕하세유, 반가워유"
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
public var body: some View {
VStack {
Text(title)
.font(.system(size: 26, weight: .bold))
.foregroundColor(.black)
.padding()
...
Spacer()
}
.navigationBarTitleDisplayMode(.inline)
.navigationBarBackButtonHidden()
.toolbar { toolbarContent() }
}
@ToolbarContentBuilder
private func toolbarContent() -> some ToolbarContent {
ToolbarItem(placement: .principal) {
Text("Sample")
}
ToolbarItem(placement: .navigationBarLeading) {
backButton
}
ToolbarItem(placement: .navigationBarTrailing) {
actionButtons
}
}
private var backButton: some View {
Image(systemName: "chevron.backward")
.padding(.horizontal, 8)
.onTapGesture {
self.presentationMode.wrappedValue.dismiss()
}
}
private var actionButtons: some View {
HStack(spacing: 0) {
Image(systemName: "dot.radiowaves.left.and.right")
Image(systemName: "heart.fill")
}
}
}
환경 변수(?)를 추가해줍니다.
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
버튼 onTapGesture { }로 아래처럼 추가해줍니다.
self.presentationMode.wrappedValue.dismiss()
그러면 간단하게 Push했던 View를 Pop할 수 있습니다.
쉽죠? 끝~!
반응형