我在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)
    }
}

但是如何在SwiftUI中使用一个没有onEditingChanged参数的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)
    }
}

最佳答案

SwiftUI没有focused/unfocused的方法。您需要使用@state@observablleonTapGesture来实现。但是onTapGesture会在每次录制SecureField时调用。

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

}

关于swift - 当SecureField在SwiftUI中变得集中/不集中时执行代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56825107/

10-10 20:52