티스토리 뷰

문제의 코드

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)
            }
        }
    }
}

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함