微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SwiftUI - 在禁用的 SecureField 中检测点击?

如何解决SwiftUI - 在禁用的 SecureField 中检测点击?

我正在使用 SwiftUI 编写 iOS 应用程序。作为提供的数据的一部分,我需要一个密码字段,其中包含一个在隐藏/可见之间切换的显示/隐藏按钮。为此,我结合使用了 SwiftUI 的 SecureFieldTextField 控件。两者都处于 disabled 状态以防止用户编辑,因为我希望此字段为只读。此设置运行良好。 (见下方截图)

enter image description here

现在我想添加功能,允许用户只需点击它就可以将密码复制到剪贴板。我在我的 onTapGesture添加一个 SecureField 块,但它从未被调用。我相信这是因为我的 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 为只读,但仍能检测到用户何时点击控件?

解决方法

我能够通过在我的 ZStack 上添加以下修饰符来解决这个问题:

.contentShape(Rectangle())
.onTapGesture {
   ...
}

完成此操作后,我的 ZStack 开始拦截触摸事件,我可以执行所需的操作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。