SwiftUI Picker选择更改时,有没有一种方法可以调用函数?

当selectedOption的值更改时,我想调用一个函数。在SwiftUI中,有没有一种类似于编辑TextField的方法?

具体来说,我想在用户更改selectedOption时保存选择的选项。

这是我的选择器:

struct BuilderPicker: View {

let name: String

let options: Array<String>

@State var selectedOption = 0

var body: some View {

HStack {

Text(name)

.font(.body)

.padding(.leading, 10)

Picker(selection: $selectedOption, label: Text(name)) {

ForEach(0 ..< options.count) {

Text(self.options[$0]).tag($0)

}

}.pickerStyle(SegmentedPickerStyle())

.padding(.trailing, 25)

}.onTapGesture {

self.selectedOption = self.selectedOption == 0 ? 1 : 0

}

.padding(.init(top: 10, leading: 10, bottom: 10, trailing: 0))

.border(Color.secondary, width: 3)

.padding(.init(top: 0, leading: 15, bottom: 0, trailing: 15))

.font(.body)

}

}

我仍然是SwiftUI的新手,希望获得一些帮助。谢谢!

回答:

如果在视图中使用@State值,则不需要多余的变量 name

  struct BuilderPicker: View {

// let name: String = ""

let options: Array<String> = ["1", "2","3","4","5"]

@State var selectedOption = 0

var body: some View {

HStack {

Text(options[selectedOption])

.font(.body)

.padding(.leading, 10)

Picker(selection: $selectedOption, label: Text(options[selectedOption])) {

ForEach(0 ..< options.count) {

Text(self.options[$0]).tag($0)

}

}.pickerStyle(SegmentedPickerStyle())

.padding(.trailing, 25)}

// }.onTapGesture {

// self.selectedOption = self.selectedOption == 0 ? 1 : 0

// }

.padding(.init(top: 10, leading: 10, bottom: 10, trailing: 0))

.border(Color.secondary, width: 3)

.padding(.init(top: 0, leading: 15, bottom: 0, trailing: 15))

.font(.body)

}

}

如果需要对@State进行单独的操作,最简单的方法是在视图中添加一行:onReceive()。

  HStack {

Text("")

.font(.body)

.padding(.leading, 10)

Picker(selection: $selectedOption, label: Text("")) {

ForEach(0 ..< options.count) {

Text(self.options[$0]).tag($0)

}

}.pickerStyle(SegmentedPickerStyle())

.padding(.trailing, 25)}

// }.onTapGesture {

// self.selectedOption = self.selectedOption == 0 ? 1 : 0

// }

.padding(.init(top: 10, leading: 10, bottom: 10, trailing: 0))

.border(Color.secondary, width: 3)

.padding(.init(top: 0, leading: 15, bottom: 0, trailing: 15))

.font(.body)

.onReceive([self.selectedOption].publisher.first()) { (value) in

print(value)

}

以上是 SwiftUI Picker选择更改时,有没有一种方法可以调用函数? 的全部内容, 来源链接: utcz.com/qa/422617.html

回到顶部