【发布时间】:2019-08-20 14:41:53
【问题描述】:
更新:14 个月后,AppKit 发行说明中有这样一个有趣的说明:
您在选定列表行中编辑的文本字段现在具有正确的文本前景色。 (68545878)
现在,当将 TextField 放入 List 时,TextField 在第一次被选中时变为焦点,但随后的编辑尝试失败:选中了 List 行但 TextField 没有获得焦点。
O/P:
在 beta6 SwiftUI macOS(not iOS)应用程序中,我需要一个带有可编辑文本字段的 List,但列表中的 TextFields 不可编辑。如果我将List 换成Form(或只是VStack),它工作正常,但我需要它与List 一起使用。是否有一些技巧可以告诉列表使字段可编辑?
import SwiftUI
struct ContentView: View {
@State var stringField: String = ""
var body: some View {
List { // works if this is VStack or Form
Section(header: Text("Form Header"), footer: Text("Form Footer")) {
TextField("Line 1", text: $stringField).environment(\.isEnabled, true)
TextField("Line 2", text: $stringField)
TextField("Line 3", text: $stringField)
TextField("Line 4", text: $stringField)
TextField("Line 5", text: $stringField)
}
}
}
}
【问题讨论】:
-
您能解释一下为什么要在 5 个文本字段中编辑同一个变量吗?
-
我不知道它应该做什么,但如果我剪切你的代码并将其粘贴到 Xcode 中并在模拟器中运行它,那么我可以编辑所有文本字段中的文本并显示编辑后的文本在所有文本字段中。它似乎在预览版中不起作用,但在预览版中却很少起作用,以至于我几乎从未使用过它。
-
我知道它可以在模拟器中工作,但如上所述,这是针对 macOS 应用程序,而不是 iOS 应用程序。绑定到同一个字符串字段只是一个示例——它可以很容易地成为 5 个不同的绑定,并且文本字段在 macOS 上将保持不可编辑。
-
很抱歉错过了它是一个 macOS 应用程序,尽管在我看来 SwiftUI 仅适用于 mac 上的催化剂。无论如何,它仍然对我有用,丑陋但实用。也许他们在 Beta 7 中修复了它。
-
看起来你发现了一个错误。对于它的价值
ForEach(1...5, id: \.self) { TextField("Line \($0)", text: self.$stringField) }有效,即使将其包装在 ScrollView()