使用 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 中获取文本

检测用户何时停止/暂停在 TextField 中写入 - SwiftUI

SwiftUI:UIAlertController 的 textField 在 UIAlertAction 中没有响应