能否让SwiftUI非可编辑Text组件显示SecureField式黑圆点?
解决方案
你可以通过两种方式实现需求,不需要依赖绑定变量的SecureField:
1. 自定义SecureText视图
直接创建一个接收普通String的自定义视图,根据原字符串长度生成对应数量的黑圆点:
struct SecureText: View { let content: String // 使用和系统SecureField一致的黑圆点字符 private let passwordDot = "●" var body: some View { Text(String(repeating: passwordDot, count: content.count)) } }
使用方式
替换你代码中的占位注释即可:
Group { if visible { Text(content) } else { SecureText(content: content) } } .font(.title3)
2. 自定义便捷方法
如果偏好更简洁的调用风格,可以写一个全局便捷方法:
func secureText(_ content: String) -> Text { Text(String(repeating: "●", count: content.count)) }
使用方式
Group { if visible { Text(content) } else { secureText(content) } } .font(.title3)
补充说明
- 两种方案都会生成和原字符串长度一致的黑圆点,和
SecureField的显示逻辑完全匹配; - 无法直接给
Text添加turnContentIntoCircles这类Modifier,因为SwiftUI的Text内部封装了内容,无法直接获取原始字符串的长度,必须显式传入原字符串来生成对应圆点; - 如果需要完全匹配系统
SecureField的样式(如圆点大小、间距),保持和原Text相同的字体设置即可,样式会自动对齐。
内容的提问来源于stack exchange,提问作者BlowMyMind
相关产品推荐
相关产品推荐

