使用 SwiftUI 中活动 TextField 中的值更新非活动 TextField
Posted
技术标签:
【中文标题】使用 SwiftUI 中活动 TextField 中的值更新非活动 TextField【英文标题】:Update inactive TextFields using value from active TextField in SwiftUI 【发布时间】:2019-10-23 05:02:24 【问题描述】:是否可以将 TextFields 绑定到 SwiftUI 中的其他 TextFields,其中活动 TextField 中的值用于更新非活动 TextFields 的值?
在下面的代码中,我想在 TextField X 中输入值 10 并让 TextField Y 自动显示数字 13,即 10 + 3。或者,我想在 TextField Y 中输入 18 和数字 9将出现在从 18 / 2 计算的 TextField X 中。
struct ContentView: View
@State private var x = 0.0
@State private var y = 0.0
private var numberFormatter: NumberFormatter
let numFormatter = NumberFormatter()
numFormatter.usesSignificantDigits = true
return numFormatter
var body: some View
VStack(spacing: 20)
HStack
TextField("Enter X", value: $x, formatter: numberFormatter)
.frame(width: 120)
Text("X where X = Y / 2")
.frame(alignment: .leading)
HStack
TextField("Enter Y", value: $y, formatter: numberFormatter)
.frame(width: 120)
Text("Y where Y = X + 3")
.frame(alignment: .leading)
.padding()
.frame(width: 400)
【问题讨论】:
【参考方案1】:下面的代码按照您的要求执行,但请注意 x 和 y 仅在用户点击键盘的返回按钮后更新,而不是自动更新。
TextField("Enter X", value: $x, formatter: numberFormatter, onEditingChanged: _ in
self.y = self.x + 3
)
TextField("Enter Y", value: $y, formatter: numberFormatter, onEditingChanged: _ in
self.x = self.y / 2
)
【讨论】:
活动文本字段应该更新非活动文本字段。我编辑了我的问题以澄清这一点。 如果您的意思是不活动的没有焦点的那个,那么它就可以工作。但是,如果您单击另一个 TextField,则会再次计算它。以上是关于使用 SwiftUI 中活动 TextField 中的值更新非活动 TextField的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI macOS 在 TextField 处于活动状态时使用箭头键滚动列表
SwiftUI SecureField 跟踪活动/非活动状态
SwiftUI - 在 ForEach 中获取 TextField 数组
SwiftUi 有没有办法在 TextField 中获取文本