ios - 如何知道 SwiftUI 中的 SecureTextField 何时获得焦点或失去焦点?

标签 ios swiftui

我想知道,我们如何检测 SecureTextField 是失去焦点还是获得焦点。

目前我正在使用点击手势来检查是否获得焦点并相应地更改边框颜色,但有时颜色会更改但编辑不会开始。

SecureField("Password", text: $viewModel.password) {
                        passwordEditingState = .ended
                        focusedTextField = nil
                    }
                    .onTapGesture {
                        focusedTextField = TextFields.password.rawValue
                    }
                    .padding(20)
                    .background(Color.systemDefaultSecondary)
                    .cornerRadius(16.0)
                    .disableAutocorrection(true)
                    .autocapitalization(.none)
                    .overlay(RoundedRectangle(cornerRadius: 16).stroke(isSelected ? Color.green : Color.gray, lineWidth: 1))

需要考虑的一件事是我的应用程序的最低目标是 14.1,因此我需要一个基于此的解决方案。

最佳答案

您可以将 focused 修饰符与 FocusState 一起使用,如下所示。

使用 Xcode 13/iOS 15 准备和测试的演示。

注意:您需要模拟器或真实设备 - 它在预览中不起作用

demo

struct ContentView: View {
    @FocusState var isInFocus: Bool
    @State private var text: String = "password"

    var body: some View {
        VStack {
            if isInFocus {
                Text("Field is in focus!")
            }
            SecureField("Password", text: $text)
                .focused($isInFocus)
        }
    }
}

关于ios - 如何知道 SwiftUI 中的 SecureTextField 何时获得焦点或失去焦点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68608616/

相关文章:

ios - PhoneGap 发布图片 iOS Apple Store 提交

ios - 当我在模型中使用withAnimation时,没有动画发生,为什么?

ios - 如何在导航栏内添加页面指示器?

ios - 委托(delegate)返回不正确的 ViewController 实例号

没有披露指示器的SwiftUI NavigationButton?

ios - SwiftUI - 过渡动画在 GeoReader 中不起作用?

swift - SceneDelegate 和 AppDelegate 的区别

ios - SwiftUI:iOS 15 中的 NavigationBar 和 TabBar 出现故障

ios - Swift 错误 fatal error : unexpectedly found nil while unwrapping an Optional value

ios - 在自动调整 TextView 大小时输入文本时 UITableView 闪烁/断断续续