Swift/SwiftUI
sheet (Q)
Lyla.
2023. 8. 2. 01:12
Button("포켓몬 추가") {
self.isPresented.toggle()
}.sheet(isPresented: $isPresented) {
//띄울 뷰 & 뷰에 전달할 바인딩 값
AddPocketmonView(pocketmonStore: pocketmonStore, isShowingAddSheet: $isShowingAddSheet)
}
sheet(isPresented:onDismiss:content:)
Presents a sheet / when a binding to a Boolean value that you provide is true.
⚠️ 오류: 바인딩 값 변수를 같게 (isPresented)로 통일한다.
예제 코드
struct ContentView: View {
@State private var showingSheet: Bool = false
var body: some View {
VStack {
Button {
showingSheet.toggle()
} label: {
Text("Show sheet!")
.font(.largeTitle)
}
}
.sheet(isPresented: $showingSheet) {
Text("This is sheet!")
// .presentationDetents([.medium, .large])
// .presentationDetents([.height(140)])
.presentationDetents([.fraction(0.70)])
// .presentationDragIndicator(.hidden)
}
}
}
1. 버튼을 눌러서 showingSheet가 true가 되면 sheet가 나타난다.
struct ShowLicenseAgreement: View {
@State private var isShowingSheet = false
var body: some View {
Button(action: {
isShowingSheet.toggle()
}) {
Text("Show License Agreement")
}
.sheet(isPresented: $isShowingSheet,
onDismiss: didDismiss) {
VStack {
Text("License Agreement")
.font(.title)
.padding(50)
Text("""
Terms and conditions go here.
""")
.padding(50)
Button("Dismiss",
action: { isShowingSheet.toggle() })
}
}
}
func didDismiss() {
// Handle the dismissing action.
}
}
버튼에도 붙일 수 있고, Vstack에도 붙일 수 있다.
import SwiftUI
struct ContentView: View {
@State private var show: Bool = false
@State private var show2: Bool = false
var body: some View {
VStack {
Button {
show.toggle()
} label: {
Text("Show sheet1!")
.font(.largeTitle)
}
Button {
show2.toggle()
} label: {
Text("Show sheet2")
.font(.largeTitle)
}
.sheet(isPresented: $show2) {
Text("시트2")
.presentationDetents([.fraction(0.70)])
}
}
.sheet(isPresented: $show) {
Text("시트1!")
.presentationDetents([.fraction(0.70)])
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Q) 바인딩한 변수의 값에 따라 시트가 나타난다면 sheet코드의 위치는 상관 없는 것인가?