【问题标题】:Execute code when SecureField gets focused/unfocused in SwiftUI当 SecureField 在 SwiftUI 中获得焦点/不焦点时执行代码
【发布时间】:2019-06-30 13:13:00
【问题描述】:

我在 SwiftUI 中有一个 SecureField。当该字段获得焦点时(当用户点击它时),我想操作 @State 属性以应用 SecureField 的偏移量修饰符。当 SecureField 失去焦点时,@State 属性应该再次重置。如果键盘被切换,我想这样做是为了让 SecureField 可见。

我使用 TextField 的 onEditingChanged 参数实现了这一点,但 SecureField 不存在此参数。

如何使用 SwiftUI 中的 SecureField 执行此操作?

如果 TextField 被聚焦,这将应用偏移:

import SwiftUI

let lightGreyColor = Color(red: 239.0/255.0, green: 243.0/255.0, blue: 244.0/255.0, opacity: 1.0)

struct ContentView : View {
    @State private var textFieldString: String = ""

    @State private var editingMode: Bool = false

    var body: some View {
        VStack {
            SecureField($textFieldString, placeholder: Text("My placeholder"))
            }
            .padding()
            .background(lightGreyColor)
            .cornerRadius(10.0)
            .padding()
            .offset(y: editingMode ? -150 : 0)
    }
}

但是如何在没有 onEditingChanged 参数的 SwiftUI 中使用 SecureField 来实现相同的功能?

struct ContentView : View {
    @State private var textFieldString: String = ""

    @State private var editingMode: Bool = false

    var body: some View {
        VStack {
            SecureField($textFieldString, placeholder: Text("My placeholder"))
            }
            .padding()
            .background(lightGreyColor)
            .cornerRadius(10.0)
            .padding()
            .offset(y: editingMode ? -150 : 0)
    }
}

【问题讨论】:

  • SecureField 没有 onEditingChanged。但是有TextField。不知道为什么?
  • 我们解决了吗,我也遇到了同样的问题
  • @Andreas 你为什么不观察键盘会显示出版商?
  • 让我澄清一下:聚焦和编辑是两个不同的东西。有两种焦点:硬件键盘焦点和可访问性焦点。 Apple 对焦点的定义是焦点让用户在实际激活之前选择他们想要激活的内容。当“辅助功能”>“全键盘访问”打开时,您可以在开始编辑之前使用键盘聚焦文本字段。事实上,您可以专注于与正在编辑的领域不同的领域。

标签: swift textfield swiftui


【解决方案1】:

SwiftUI 没有focused/unfocused 的方法。您需要使用@state@observablleonTapGesture 来实现此目的。但是onTapGesture每次都在SecureField被录音的时候打电话。

SecureField($textFieldString, placeholder: Text("My placeholder"))
            }
.onTapGesture {
//here apply condition

}

【讨论】:

  • 如果用户使用硬件键盘,他们可以在不编辑和不点击的情况下聚焦字段。所以这个答案有点错误。
【解决方案2】:

您可以像以前一样继续使用 UITextField,并切换其 secureTextEntry 字段,而不是使用 SecureField 组件。

【讨论】:

  • 感谢您的回答,但我正在尝试仅使用 SwiftUI 框架来学习什么是可能的
猜你喜欢
  • 2013-11-26
  • 1970-01-01
  • 2015-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多