我正在尝试创建一个 TextField
并在其下方添加一行,为此我使用了 this answer 中建议的 Divide
并在其中添加了一个 .onTapGesture()
以更改 Divider
颜色,但这是嵌入在另一个 View 中的组件。
在我的 ContentView
中,我有一个 Button
和我的 UnderscoredTextField
,它们包含在 HStack
中,并且它包含在 Background
组件(取自 this answer )中,以便能够以编程方式关闭键盘,但我希望能够更改 @State var isActive
发生这种情况时 UnderscoredTextField
中的变量,但由于我是 SwiftUI 的新手,我不太确定如何实现这一点。
import SwiftUI
struct ContentView: View {
var body: some View {
Background {
UnderscoredTextField(phoneNumber: "")
}.onTapGesture {
self.hideKeyboard()
//How to tell my UnderscoreTextField's isActive variable to change
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
import SwiftUI
struct UnderscoredTextField: View {
@State var phoneNumber: String
@State var isActive: Bool = false
var body: some View {
VStack {
TextField("12345678", text: $phoneNumber)
.keyboardType(.phonePad)
.onTapGesture {
self.isActive = true
}
Divider()
.padding(.horizontal)
.frame(height: 1)
.background(isActive ? Color.red : Color.gray)
}
}
}
struct UnderscoredTextField_Previews: PreviewProvider {
static var previews: some View {
UnderscoredTextField(phoneNumber: "12345678")
}
}
这是我隐藏键盘时的样子,但我想将其切换回灰色最佳答案
如果我理解正确,使用 onEditingChanged
就足够了,如下所示
var body: some View {
VStack {
TextField("12345678", text: $phoneNumber, onEditingChanged: {
self.isActive = $0 // << here !!
}).keyboardType(.phonePad)
Divider()
.padding(.horizontal)
.frame(height: 1)
.background(isActive ? Color.red : Color.gray)
}
}
关于ios - SwiftUI 在自定义 TextField 上切换事件/非事件线条颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63492364/