【问题标题】:How to select an array item which is presented in a SwiftUI List view?如何选择 SwiftUI 列表视图中显示的数组项?
【发布时间】:2020-07-30 14:39:53
【问题描述】:

我有一系列自行车类型。为了查看自行车类型选择器,我在 SwiftUI 列表视图中迭代了数组。但是,我找不到任何解决方案如何将点击的列表项选择/存储到 State 变量中。谁能给我一个解决方案吗?

我的代码如下:

import SwiftUI

struct BikeTypePickerView: View {
    @State var selectedBikeType: String = ""

    var bikeTypes: [String] = ["BIKE TYPE", "Benelli 125 2 C", "Benelli 125 SE", "Benelli 125 Sport", "Benelli 125 T", "Benelli 250 C", "Benelli 250 Quattro", "Benelli 250 Sport", "Benelli 254 Quattro", "Benelli 304", "Benelli 350 RS", "Benelli 354"]

    init() {
        UITableView.appearance().separatorColor = .clear
    }
    var body: some View {
        VStack {
            List(bikeTypes, id: \.self, selection: $selectedBikeType) { type in
                Text(type)
            }
        }
        .frame(width: 150, height: 400)
        .font(.system(size: 13))
        .shadow(radius: 5)
    }
}

struct BikeTypePickerView_Previews: PreviewProvider {
    static var previews: some View {
        BikeTypePickerView()
    }
}

【问题讨论】:

    标签: arrays list swiftui


    【解决方案1】:

    试试下面的代码。使用下面的代码,您可以将所选项目保存在 selectedBikeType 中,并在您第二次点击该项目时删除。

    struct ContentView: View {
    
        @State var selectedBikeType = Set<String>()
    
        var bikeTypes: [String] = ["BIKE TYPE", "Benelli 125 2 C", "Benelli 125 SE", "Benelli 125 Sport", "Benelli 125 T", "Benelli 250 C", "Benelli 250 Quattro", "Benelli 250 Sport", "Benelli 254 Quattro", "Benelli 304", "Benelli 350 RS", "Benelli 354"]
    
        init() {
            UITableView.appearance().separatorColor = .clear
        }
    
        var body: some View {
            VStack {
                List(self.bikeTypes, id: \.self, selection: $selectedBikeType) { type in
                    Text(type)
                        .onTapGesture {
                        if self.selectedBikeType.contains(type) {
                            self.selectedBikeType.remove(type)
                        }
                        else{
                            self.selectedBikeType.insert(type)
                        }
                        print(self.selectedBikeType)
                    }
                }
            }
            .frame(width: 150, height: 400)
            .font(.system(size: 13))
            .shadow(radius: 5)
        }
    }
    

    【讨论】:

      【解决方案2】:

      试试这个

      import SwiftUI
      
      struct BikeTypePickerView: View {
          @Binding var selectedBikeType: String
      
          var bikeTypes: [String] = ["BIKE TYPE", "Benelli 125 2 C", "Benelli 125 SE", "Benelli 125 Sport", "Benelli 125 T", "Benelli 250 C", "Benelli 250 Quattro", "Benelli 250 Sport", "Benelli 254 Quattro", "Benelli 304", "Benelli 350 RS", "Benelli 354"]
      
          init() {
              UITableView.appearance().separatorColor = .clear
          }
          var body: some View {
              VStack {
                  List(bikeTypes, id: \.self, selection: $selectedBikeType) { type in
                      Text(type)
                  }
              }
              .frame(width: 150, height: 400)
              .font(.system(size: 13))
              .shadow(radius: 5)
          }
      }
      

      【讨论】:

      • 还是不行。而是说无法推断通用参数“SelectionValue”显式指定通用参数以解决此问题
      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      • 2011-11-29
      • 2021-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多