You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 08:40:37