

swiftui のFormからPickerを利用して選択をさせようとしています。  
現状では１件、例えばType01を選択は可能ですが、type01,type02と複数を選択したいのでが可能でしょうか

[code]

    let TypeArray = ["type01", "type02", "type03", "type04", "type05", "type06", "type07"]
    @State private var selection = 0
    var body: some View {
        ZStack{
            Form {
                Picker(selection: $selection, label: Text("type")) {
                    ForEach(0 ..< TypeArray.count) { num in
                        Text(self.TypeArray[num])
                    }
                }
                
    ・・・・略
        
    
[/code]


CC BY-SA 4.0
2022-05-02T03:22:21.833
88607
2022-08-25T14:29:42.143
42463
question
swiftui form
swiftui pickerで複数選択をしたいのですが可能でしょうか


Pickerで複数選択はできないと思いますので、それに近いものを自分で書く必要があるかと思います。  
もし複数選択できたらすいません。

[code]

    struct TypeEntity: Identifiable {
        var id: String = UUID().uuidString
        var name: String
        var isTap: Bool = false
        
        init(name: String) {
            self.name = name
        }
    }
    struct SwiftUIView: View {
        @State private var typeSelection: Int = 0
        @State private var showType: Bool = false
        @State private var TypeArray: [TypeEntity] = [
            TypeEntity(name: "type01"),
            TypeEntity(name: "type02"),
            TypeEntity(name: "type03"),
            TypeEntity(name: "type04"),
            TypeEntity(name: "type05"),
            TypeEntity(name: "type06"),
        ]
        var message: String {
            if TypeArray.filter({ $0.isTap }).isEmpty {
                return "選択してください"
            } else {
                var types: [String] = []
                for type in TypeArray.filter({ $0.isTap }) {
                    types.append(type.name)
                }
                return types.joined(separator: ",")
            }
        }
        var body: some View {
            Form {
                HStack {
                    Text("Type")
                    Spacer()
                    Button("\(message)") {
                        self.showType.toggle()
                    }
                }
                if self.showType {
                    ForEach(TypeArray.indices) { i in
                        HStack {
                            if TypeArray[i].isTap {
                                Image(systemName: "checkmark")
                            }
                            Text("\(TypeArray[i].name)")
                            Spacer()
                        }
                        .contentShape(Rectangle())
                        .onTapGesture {
                            TypeArray[i].isTap.toggle()
                        }
                    }
                }
            }
        }
    }
    
[/code]

こんな感じで選択欄を表示させるボタンと、Typeの構造体を用意しタップされたらType構造体の`isTap`を`true`にし、それに連動してチェックマークを表示するというようにすれば複数選択のようなことが可能になります。


CC BY-SA 4.0
2022-08-25T14:29:42.143
90761
2022-08-25T14:29:42.143
54133
88607
answer