[SwiftUI macOS 앱] NavigationView > List 맨 위에 요소를 추가하는 샘플

7157 단어 macosSwiftUI


포인트는


  • Person struct 에 order 를 갖게 해 보았습니다.
  • .listStyle(SidebarListStyle) 를 지정하면, 거동이 아무래도 버그하므로 주의해 주세요. 나는 이것으로 8시간은 빠졌습니다.

  • 버그라고 하는 것은, 리스트의 선두에 요소를 추가하면(자), 왠지 두번째 요소를 클릭했을 때, 1번째와 2번째가 양쪽 모두 선택 상태가 됩니다.

    이쪽이 버그하고 있는 그림↓↓↓↓↓



    코드



    ContentView.swift
    import SwiftUI
    
    struct Person: Identifiable, Hashable {
        var id = UUID()
        var name: String
        var order: Int
    }
    
    struct ContentView: View {
        @State var people = [
            Person(name: "taro", order: 1),
            Person(name: "yuki", order: 0)
        ]
        @State var selectedPerson: Person?
        var body: some View {
            VStack {
                AddButton(people: $people)
                NavigationView {
                    List(people.sorted{$0.order < $1.order}, id: \.self, selection: $selectedPerson) { person in
                        Text(person.name)
                    }.frame(width: 150)
                    if selectedPerson != nil {
                        Detail(person: selectedPerson!)
                    }
                }
            }
        }
    }
    
    struct AddButton: View {
        @Binding var people: [Person]
        var body: some View {
            Button("add", action: {
                print("add")
                self.people.append(Person(name: "fuga", order: -1))
            })
        }
    }
    
    struct Detail: View {
        var person: Person
        var body: some View {
            VStack {
                Text(person.name)
            }.frame(maxWidth: .infinity, maxHeight: .infinity)
        }
    }
    

    좋은 웹페이지 즐겨찾기