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
相关产品推荐
相关产品推荐

