首页 > 解决方案 > 如何使用自定义 PickerStyle 创建单选按钮组?

问题描述

PickerStyle 提供 WheelPickerStyle、SegmentedPickerStyle 等。我想自定义它创建一个单选按钮,一次只能选择一个。

我是 Android 开发人员,对 swift 非常陌生。我正在使用SwiftUI来满足我的 UI 需求。

我查看了文档,有一个 PickerStyle 协议,但我无法实现它,也没有找到任何教程。我有以下代码:

struct RadioPickerStyle: PickerStyle {

    static func _makeView<SelectionValue>(value: _GraphValue<_PickerValue<RadioPickerStyle, SelectionValue>>, inputs: _ViewInputs) -> _ViewOutputs where SelectionValue : Hashable {
//        Text("\(value)")
    }

    static func _makeViewList<SelectionValue>(value: _GraphValue<_PickerValue<RadioPickerStyle, SelectionValue>>, inputs: _ViewListInputs) -> _ViewListOutputs where SelectionValue : Hashable {
//        List(inputs) {
//            ForEach
//        }
    }

我想在以下代码中使用它:

...
    @State var gender: Int = 0
    let genderOptions: [String] = ["Male", "Female", "Other"]
...
                    Picker("Gender", selection: $gender) {
                        ForEach(0 ..< genderOptions.count) { option in
                            Text(self.genderOptions[option])
                                .tag(self.gender)
                        }
                    }
                    .pickerStyle(RadioPickerStyle())
...

有谁可以告诉我什么是_ViewInputs,_ViewOutputs和?_ViewListInputs_ViewListOutputs

标签: iosswiftxcodeuikitswiftui

解决方案


使用此代码,您可以在所选变量中获得标签值。

@State private var selected : Int = 0

Picker("Gender:", selection: $selected){
    Text("Male").tag(0)
    Text("Female").tag(1)
    Text("Male").tag(0)   
}.pickerStyle(RadioPickerStyle())

Text("\(selected)")

推荐阅读