放置在macOS上的列表中时,TextField被禁用(不可编辑)。当为iOS构建相同的代码并在Simulator中运行时,它可以按预期工作。
这是一个错误,还是我错过了什么?
代码:
struct ContentView : View {
@State private var text: String = ""
var body: some View {
VStack {
List {
// TextField is not editable when this code is ran on macOS
TextField($text, placeholder: Text("Entry text"))
Text("Entered text: \(text)")
}
// TextField is editable on both macOS as well as iOS
TextField($text, placeholder: Text("Entry text"))
}
}
}
答案 0 :(得分:0)
那是因为该列表需要点击来驱动选择,而您在这里没有使用它。只有在其所在的行处于选中状态时,TextField才能在macOS的列表中可编辑。
如果您将代码更改为类似的内容
struct ContentView : View {
@State private var text: String = "Hello"
@State private var selection: Int? = nil
var body: some View {
VStack {
List(selection: $selection) {
ForEach(0..<5) { _ in
TextField(self.$text)
}
}
TextField($text)
}
}
}
然后运行代码,第一次单击单元格将使其被选中,第二次单击将使文本字段获得焦点。
答案 1 :(得分:0)
使用以下代码创建TextField
struct ContentView : View {
@State private var helloText: String = "Hello"
@State private var selection: Int? = nil
var body: some View {
VStack {
List(selection: $selection) {
ForEach(0..<5) { _ in
TextField(.constant(self.helloText), placeholder: Text("Entry text")).textFieldStyle(.roundedBorder)
}
}
}
}
}