SwiftUI-当放置在macOS上的列表中时,TextField被禁用(不可编辑)

时间:2019-06-24 08:46:03

标签: ios macos swiftui

放置在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"))
        }
    }
}

2 个答案:

答案 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)
                }
            }

        }
    }
}