我正在使用SwiftUI编写一个iOS应用程序。作为显示数据的一部分,我需要有一个带有显示/隐藏按钮的密码字段,该按钮可在隐藏/可见之间切换。为此,我结合使用了SwiftUI的SecureField和TextField控件。这两个字段都处于disabled状态,以防止用户编辑,因为我希望这个字段是只读的。这个设置工作得很好。(见下面的截图)

现在我想添加一些功能,允许用户只需轻点就可以将密码复制到剪贴板上。我已经在我的SecureField中添加了一个onTapGesture块,但是它从未被调用过。我相信这是因为我的SecureField/TextField被标记为禁用。下面是我的代码片段:
ZStack(alignment: .trailing) {
if isSecured {
VStack {
SecureField("", text: Binding.constant(text))
.disabled(true)
.onTapGesture {
print("USER TAPPED!")
}
}
} else {
TextField("", text: Binding.constant(text))
.disabled(true)
}
Image(systemName: self.isSecured ? "eye" : "eye.slash")
.accentColor(.gray)
.foregroundColor(.gray)
.frame(width: 20, height: 20, alignment: .center)
.modifier(TouchDownUpEventModifier(changeState: { (buttonState) in
withAnimation {
self.isSecured.toggle()
}
}))
}有没有办法做到这一点?我希望我的SecureField/TextField是只读的,但当用户点击控件时仍能检测到吗?
发布于 2021-07-14 23:58:29
我可以通过在我的ZStack上添加以下修饰符来解决这个问题
.contentShape(Rectangle())
.onTapGesture {
...
}一旦我这样做了,我的ZStack开始拦截触摸事件,我可以执行所需的操作。
https://stackoverflow.com/questions/68352345
复制相似问题