swiftui - 如何延迟 SwiftUI 的 SecureField 中字符的模糊/屏蔽,以便每个键入的字符在隐藏之前显示约 1 秒?
问题描述
当使用 SwiftUI 的SecureField时,用户的输入会立即被隐藏/屏蔽/变成 •,这使得很难确认用户是否确实输入了正确的密码。我们的一些用户对此提出了抱怨,而且似乎大多数人希望看到他们输入的字符大约一秒钟左右就会消失,这让他们可以直观地确认他们点击了正确的字母并且现在可以继续o 令人担忧。
是否可以在其中添加延迟并暂时显示最后输入的字符?
解决方案
我认为目前在 SwiftUI 中这是不可能的,但这是我们在此期间一直在使用的 hack。它将 SecureField 堆叠在 TextField 之上,并在用户单击眼睛时切换其不透明度(以显示文本)。当然,它显示了整个字符串而不是最后一个字母,但它可以工作。
我确信在 UIKit 中有可以转换的开源方法库,但我会让其他人回答这个问题。
struct SecureTextFieldView: View {
@State var text: String = ""
@State var showText: Bool = false
var body: some View {
ZStack {
TextField("Password", text: $text)
.opacity(showText ? 1.0 : 0.0)
SecureField("Password", text: $text)
.opacity(showText ? 0.0 : 1.0)
}
.padding()
.background(
Color(UIColor.secondarySystemBackground).cornerRadius(10)
)
.overlay(
Image(systemName: "eye.fill")
.foregroundColor(showText ? .black : .gray)
.padding(.trailing)
.onLongPressGesture(minimumDuration: 20, maximumDistance: 30, pressing: { (_) in
showText.toggle()
}, perform: {})
, alignment: .trailing
)
.padding()
}
}
struct SecureTextFieldView_Previews: PreviewProvider {
static var previews: some View {
SecureTextFieldView()
}
}
推荐阅读
- ruby-on-rails - skip_before_action 不起作用
- laravel - Laravel 5.1 $request-> 文件返回 null
- javascript - 如何将图像上传到 nodejs 服务器使用改造 android
- javascript - 如何在嵌套的 Promise 中停止函数执行
- java - Hikari DB Connection Maximum Pool 理解和调优
- django - 跨多个 Web 服务器部署时的 ES6 模块路径
- postgresql - 非常简单的查询 PostgreSQL 在 New Relic 中需要很长时间?
- ios - Scenekit 手势识别器和覆盖SKScene 触摸
- perl - 从子程序中的文件句柄引用中读取
- matlab - 将父函数的输出与嵌套函数的输入相关联