在 macOS 上放置在 List 中时,TextField 被禁用(不可编辑)。当为 iOS 构建相同的代码并在模拟器中运行时,它会按预期工作。
这是一个错误,还是我错过了什么?
编码:
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"))
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 1
这是因为列表需要点击来驱动选择,而您在这里没有使用它。仅当 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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后运行代码,第一次单击单元格将导致其被选中,第二次单击将导致文本字段接收焦点。