SwiftUI/Views
[SwiftUI] EditButton 사용 시, EditMode 감지하기
_히처리_
2023. 8. 23. 12:10
문제의 코드
EditButton은 editMode를 지원하는 컨테이너의 environment의 editMode를 토글한다.
나는 EditButton을 사용 시 EditMode를 감지하여 Text로 출력하고 싶었다.
struct ContentView: View {
@Environment(\.editMode) private var editMode
var body: some View {
VStack {
NavigationStack {
List {
Text(editMode?.wrappedValue == .active ? "Edit Mode" : "Normal Mode")
ForEach(0..<3) { value in
Text("\(value)")
}
.onDelete { _ in
}
}
.toolbar {
ToolbarItem {
EditButton()
}
}
}
}
}
}
하지만 EditButton을 눌르면 List는 반응하지만 Text는 editMode에 반응하지 않는다.
해결 방법
Text가 editMode를 감지하려면 editMode를 @State로 만들고, editMode를 List의 enviroment로 제공해야 한다.
struct ContentView: View {
@State private var editMode: EditMode = .inactive
var body: some View {
VStack {
NavigationStack {
List {
Text(editMode == .active ? "Edit Mode" : "Normal Mode")
ForEach(0..<3) { value in
Text("\(value)")
}
.onDelete { _ in
}
}
.toolbar {
ToolbarItem {
EditButton()
}
}
.environment(\.editMode, $editMode)
}
}
}
}