当使用SwiftUI的新TextEditor时,可以使用@State直接修改其内容。但是,我还没有找到向其添加占位符文本的方法。现在可行吗?
我添加了一个苹果在他们自己的翻译应用程序中使用的例子。它似乎是支持占位符文本的多行文本编辑器视图。
发布于 2020-07-05 15:23:28
这是不可能的,但您可以使用ZStack或.overlay属性实现此效果。
您应该做的是检查保存状态的属性。如果是,则为空,显示占位符文本。如果没有,则显示输入的文本。
下面是一个代码示例:
ZStack(alignment: .leading) {
if email.isEmpty {
Text(Translation.email)
.font(.custom("Helvetica", size: 24))
.padding(.all)
}
TextEditor(text: $email)
.font(.custom("Helvetica", size: 24))
.padding(.all)
}
注意:我有意将.font和.padding样式留给您,以确保它在TextEditor和文本上都应该匹配。
编辑:考虑到王乐高的评论中提到的两个问题是如何处理对齐和不透明的问题:
HStack {
Text("Some placeholder text")
Spacer()
}
为了解决不透明的问题,您可以使用条件不透明度--最简单的方法是使用这样的三元操作符:
TextEditor(text: stringProperty)
.opacity(stringProperty.isEmpty ? 0.25 : 1)
当然,在添加对TextEditors的支持之前,这个解决方案只是一个愚蠢的解决方案。
发布于 2020-12-22 09:50:57
您可以在包含占位符文本的禁用的ZStack后面使用TextEditor
。例如:
ZStack {
if self.content.isEmpty {
TextEditor(text:$placeholderText)
.font(.body)
.foregroundColor(.gray)
.disabled(true)
.padding()
}
TextEditor(text: $content)
.font(.body)
.opacity(self.content.isEmpty ? 0.25 : 1)
.padding()
}
发布于 2020-07-26 22:09:05
在我们有API支持之前,一个选项是使用绑定字符串作为占位符,并使用onTapGesture删除它。
TextEditor(text: self.$note)
.padding(.top, 20)
.foregroundColor(self.note == placeholderString ? .gray : .primary)
.onTapGesture {
if self.note == placeholderString {
self.note = ""
}
}
https://stackoverflow.com/questions/62741851
复制相似问题