当我在模拟器或画布中运行选择器代码时,选择器总是返回第一个带有动画的选项或只是冻结。这发生在上周四/周五。所以我检查了一些旧的简单代码,在那之前它可以工作,但对我来说也不起作用。这是简单的旧代码。它在 beta 3、4 和 5 中不再起作用。
struct PickerView : View {
@State var selectedOptionIndex = 0
var body: some View {
VStack {
Text("Option: \(selectedOptionIndex)")
Picker(selection: $selectedOptionIndex, label: Text("")) {
Text("Option 1")
Text("Option 2")
Text("Option 3")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我较新的代码中,我使用了@ObservedObject,但在这里它也不起作用。此外,我没有收到任何错误,并且它可以构建和运行。感谢您的任何指点。
---- EDIT -----请先看答案
在帮助之后,我可以使用.tag()后面的所有Text()like Text("Option 1").tag(),它现在采用初始值并在视图内更新它。如果我@ObservedObject在这里使用:
struct PickerView: View {
@ObservedObject var data: Model
let width: CGFloat
let height: CGFloat
var body: some View {
VStack(alignment: .leading) {
Picker(selection: …Run Code Online (Sandbox Code Playgroud) 一旦我将 Picker 放入 ScrollView 或 VStack 并且其中有更多代码(如 ForEach 循环),则仅显示 Picker-label 。
我想知道为什么,因为在 Scrollview 之外或单独它显示正确。
这是代码:
@State private var exercises = ["Unterarmstütz", "Dehnen", "Kopfstand", "Handstand"]
@State private var selectedExercise = "Plank"
@State private var selectedTimeIndex = 60
var body: some View {
VStack {
ScrollView {
Picker(selection: $selectedTimeIndex, label: Text("select Time")) {
Text("Option 1")
Text("Option 2")
Text("Option 3")
}
ForEach(exercises.identified(by: \.self)) { exercise in
Button(action: {
self.selectedExercise = String("exercise")
}) {
Text("exercise")
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 通常我会presentTextInputControllerWithSuggestions()用来显示 TextInput 字段。但这在 swiftUI 中不可用,因为它是 WKInterfaceController 的一个函数。我必须为此使用 WKInterfaceController 吗?我在文档中找不到任何内容。