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

SwiftUI视图中如何实现带下划线空白的TextField动态填充

SwiftUI 填空题动态填充实现方案

你当前的思路没问题,通过绑定userInput联动问题区域显示是正确方向,核心要解决的是输入为空时的下划线占位显示,让空状态和输入状态的视觉保持统一。

修改后的代码如下:

struct DialogueCaptionBoxWithQuestion: View { // 遵循Swift命名规范,首字母大写驼峰式
    var questionPart1: String
    var questionPart2: String
    var correctChosen: Bool
    var answer: String
    
    @Binding var userInput: String
    @Binding var currentQuestionNumber: Int
    
    // 可根据需求调整下划线占位的长度
    private let placeholderUnderline = String(repeating: "_", count: 15)
    
    var body: some View {
        HStack {
            if !correctChosen {
                Text(questionPart1)
                    .font(Font.custom("Chalkboard SE", size: 15))
                +
                Text(userInput.isEmpty ? placeholderUnderline : userInput)
                    .font(Font.custom("Chalkboard SE", size: 15))
                    .foregroundColor(.black)
                    .underline(color: .black.opacity(1.0))
                +
                Text(questionPart2)
                    .font(Font.custom("Chalkboard SE", size: 15))
            } else {
                Text(questionPart1)
                    .font(Font.custom("Chalkboard SE", size: 15))
                +
                Text("  \(answer)  ")
                    .font(Font.custom("Chalkboard SE", size: 15))
                    .foregroundColor(.black)
                    .underline(color: .black.opacity(1.0))
                +
                Text(questionPart2)
                    .font(Font.custom("Chalkboard SE", size: 15))
            }
        }
        .padding([.top, .bottom], 10)
        .padding([.leading, .trailing], 20)
        .foregroundColor(.black)
        .background(.white)
        .cornerRadius(10)
        .shadow(radius: 5)
    }
}

关键修改说明:

  • 新增placeholderUnderline常量,定义空状态下的下划线占位符,长度可按需调整
  • 对userInput做空值判断:输入为空时显示下划线占位,有内容时显示输入文本并保持下划线样式
  • 调整结构体命名,符合Swift官方的命名规范(首字母大写、驼峰式)
  • 用字符串插值\(answer)替代字符串拼接,代码更简洁易读

这样设置后,用户在底部TextField输入内容时,userInput会通过Binding实时更新,问题区域的下划线位置会自动填充输入内容;清空输入时,会重新显示下划线占位,完全实现你想要的动态填充效果。

内容的提问来源于stack exchange,提问作者mzm0227

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:13:11