SwiftUI 목록에서 항목을 선택 취소하면 앱이 충돌합니다.

선택적 바인딩을 사용하는 SwiftUI에 문제가 있습니다. 기본적으로 macOS의 List입니다. 항목이 선택되면 DetailView를 추가하고 선택하지 않으면 텍스트 만 추가합니다.

앱을 열면 괜찮아요, 텍스트가 나타난 다음 몇 가지 항목을 추가하고 선택하고 잘 작동하고 DetailView가 나타나지만 테이블 외부를 클릭하고 선택을 취소하면 충돌이 발생합니다. 힘들어도 조건부 검사가 nil이므로 처음으로 작동합니다.

DetailView는 selectedItem에 대한 참조를 유지하고 nil로 설정되면 충돌하지만 State 속성이 변경되면 전체 본문을 새로 고쳐야한다고 생각했습니다.이 경우 메모리에서 이전 DetailView를 제거하고 새 항목을 호출하지 않습니다. 권리?

코드는 다음과 같습니다.

import SwiftUI

struct DetailView: View {
    @Binding var text: String

    var body: some View {
        TextField("123", text: self.$text)
    }
}

struct ContentView: View {
    @State var text = ""
    @State var items = [String]()
    @State var selectedItem: String? = nil

    var body: some View {
        VStack {
            HStack {
                VStack(alignment: .leading, spacing: 0) {
                    List(selection: $selectedItem) {
                        ForEach(items, id: \.self) { item in
                            Text(item)
                        }
                    }
                    HStack(spacing: 0) {
                        Button(action: {
                            self.items.append(UUID().uuidString)
                        }, label: {
                            Text("Add")
                        })
                        Button(action: {
                            if let item = self.selectedItem {
                                self.items.remove(at: self.items.firstIndex(of: item)!)
                            }
                            self.selectedItem = nil
                        }, label: {
                            Text("Remove")
                        }).disabled(selectedItem == nil)
                    }
                }
                if selectedItem != nil {
                    DetailView(text: Binding($selectedItem)!)
                } else {
                    Text("Add an item")
                }
            }
            .tabItem {
                Text("Test")
            }
        }.frame(maxWidth: .infinity, maxHeight: .infinity)
    }
}

그의 성질

DetailView는 selectedItem에 대한 참조를 유지하고 nil로 설정되면 충돌하지만 State 속성이 변경되면 전체 본문을 새로 고쳐야한다고 생각했습니다.이 경우 메모리에서 이전 DetailView를 제거하고 새 항목을 호출하지 않습니다. 권리?

업데이트 순서는 정의되어 있지 않으므로 위에서 아니요라고 대답하겠습니다.

여기에 해결책이 있습니다. Xcode 11.4 / iOS 13.4로 테스트 됨

if selectedItem != nil {
    DetailView(text: Binding(get: {self.selectedItem ?? ""}, 
                             set: {self.selectedItem = $0}))
} else {
    Text("Add an item")
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

목록보기에서 선택한 항목을 변경하려고하면 프로그램이 충돌합니다.

분류에서Dev

항목을 선택하면 목록의 DataGrid가 충돌합니다.

분류에서Dev

다른 항목이 선택된 경우 확인란을 선택 취소하려면 어떻게합니까?

분류에서Dev

ListView에서 마지막 항목을 제거하면 앱이 충돌합니다.

분류에서Dev

목록보기에서 다중 선택을 종료하면 목록 항목 패딩이 제거됩니다.

분류에서Dev

SwiftUI 앱이 두 개의 선택기 주변에서 VStack과 충돌합니다.

분류에서Dev

드롭 다운 목록에서 항목을 선택하고 목록에서 항목을 값으로 제거한 다음 합계를 업데이트합니다.

분류에서Dev

"모두 선택"을 클릭 한 후 이전에 선택한 다른 선택된 목록 항목을 어떻게 선택 취소합니까?

분류에서Dev

목록에서 노래를 클릭하면 앱이 충돌합니다.

분류에서Dev

Excel VBA-목록 상자에서 이전에 선택한 항목을 선택 취소하는 방법

분류에서Dev

목록보기 항목을 클릭하면 다른 활동을 여는 대신 앱이 충돌합니다.

분류에서Dev

MVC 선택 목록이 드롭 다운에서 선택한 항목을 표시하지 않습니다.

분류에서Dev

목록의 마지막 항목이 HStack이면 앱이 충돌합니다.

분류에서Dev

SwiftUI : 데이터를 업데이트 목록에서 항목을 선택 후

분류에서Dev

선택기 SwiftUI에서 항목 선택 취소

분류에서Dev

목록 항목을 클릭하면 충돌이 발생합니다.

분류에서Dev

swiftUI에서 항목 선택시 선택기에 작업을 추가하려면 어떻게해야합니까?

분류에서Dev

조건이 일치하면 다른 목록에서 항목을 선택하는 방법은 무엇입니까?

분류에서Dev

C ++의 ArrayList에 항목을 추가하면 Click Listener에서 Android 앱이 충돌합니다.

분류에서Dev

WPF는 MVVM에서 ListBox 항목을 선택 취소합니다.

분류에서Dev

긴 목록 선택기에서 항목이 삭제되면 앱이 닫힙니다.

분류에서Dev

Android ListView에서 마지막 항목을 제거하면 앱이 충돌합니다.

분류에서Dev

행을 명시 적으로 선택하기 전에 UIPickerView에서 "완료"버튼을 선택하면 앱이 충돌합니다.

분류에서Dev

테이블의 값과 관련된 다중 선택 목록 상자에서 항목을 자동 선택하려면 어떻게해야합니까?

분류에서Dev

목록보기 항목을 선택하면 앱이 자동으로 닫힙니다.

분류에서Dev

목록에서 항목을 선택하려면 어떻게합니까

분류에서Dev

목록 항목을 클릭 할 때 확인란을 선택하거나 선택 취소합니다.

분류에서Dev

안드로이드 스피너에 데이터를로드하고 항목을 선택할 때 충돌합니다.

분류에서Dev

SwiftUI 목록에서 선택한 행만 삭제하려면 스 와이프 하시겠습니까?

Related 관련 기사

  1. 1

    목록보기에서 선택한 항목을 변경하려고하면 프로그램이 충돌합니다.

  2. 2

    항목을 선택하면 목록의 DataGrid가 충돌합니다.

  3. 3

    다른 항목이 선택된 경우 확인란을 선택 취소하려면 어떻게합니까?

  4. 4

    ListView에서 마지막 항목을 제거하면 앱이 충돌합니다.

  5. 5

    목록보기에서 다중 선택을 종료하면 목록 항목 패딩이 제거됩니다.

  6. 6

    SwiftUI 앱이 두 개의 선택기 주변에서 VStack과 충돌합니다.

  7. 7

    드롭 다운 목록에서 항목을 선택하고 목록에서 항목을 값으로 제거한 다음 합계를 업데이트합니다.

  8. 8

    "모두 선택"을 클릭 한 후 이전에 선택한 다른 선택된 목록 항목을 어떻게 선택 취소합니까?

  9. 9

    목록에서 노래를 클릭하면 앱이 충돌합니다.

  10. 10

    Excel VBA-목록 상자에서 이전에 선택한 항목을 선택 취소하는 방법

  11. 11

    목록보기 항목을 클릭하면 다른 활동을 여는 대신 앱이 충돌합니다.

  12. 12

    MVC 선택 목록이 드롭 다운에서 선택한 항목을 표시하지 않습니다.

  13. 13

    목록의 마지막 항목이 HStack이면 앱이 충돌합니다.

  14. 14

    SwiftUI : 데이터를 업데이트 목록에서 항목을 선택 후

  15. 15

    선택기 SwiftUI에서 항목 선택 취소

  16. 16

    목록 항목을 클릭하면 충돌이 발생합니다.

  17. 17

    swiftUI에서 항목 선택시 선택기에 작업을 추가하려면 어떻게해야합니까?

  18. 18

    조건이 일치하면 다른 목록에서 항목을 선택하는 방법은 무엇입니까?

  19. 19

    C ++의 ArrayList에 항목을 추가하면 Click Listener에서 Android 앱이 충돌합니다.

  20. 20

    WPF는 MVVM에서 ListBox 항목을 선택 취소합니다.

  21. 21

    긴 목록 선택기에서 항목이 삭제되면 앱이 닫힙니다.

  22. 22

    Android ListView에서 마지막 항목을 제거하면 앱이 충돌합니다.

  23. 23

    행을 명시 적으로 선택하기 전에 UIPickerView에서 "완료"버튼을 선택하면 앱이 충돌합니다.

  24. 24

    테이블의 값과 관련된 다중 선택 목록 상자에서 항목을 자동 선택하려면 어떻게해야합니까?

  25. 25

    목록보기 항목을 선택하면 앱이 자동으로 닫힙니다.

  26. 26

    목록에서 항목을 선택하려면 어떻게합니까

  27. 27

    목록 항목을 클릭 할 때 확인란을 선택하거나 선택 취소합니다.

  28. 28

    안드로이드 스피너에 데이터를로드하고 항목을 선택할 때 충돌합니다.

  29. 29

    SwiftUI 목록에서 선택한 행만 삭제하려면 스 와이프 하시겠습니까?

뜨겁다태그

보관