首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在TextEditor中SwiftUI中添加占位符文本?

如何在TextEditor中SwiftUI中添加占位符文本?
EN

Stack Overflow用户
提问于 2020-07-05 14:16:25
回答 18查看 19.8K关注 0票数 43

当使用SwiftUI的新TextEditor时,可以使用@State直接修改其内容。但是,我还没有找到向其添加占位符文本的方法。现在可行吗?

我添加了一个苹果在他们自己的翻译应用程序中使用的例子。它似乎是支持占位符文本的多行文本编辑器视图。

EN

回答 18

Stack Overflow用户

回答已采纳

发布于 2020-07-05 15:23:28

这是不可能的,但您可以使用ZStack.overlay属性实现此效果。

您应该做的是检查保存状态的属性。如果是,则为空,显示占位符文本。如果没有,则显示输入的文本。

下面是一个代码示例:

代码语言:javascript
运行
复制
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中,并在后面立即追加空格,如下所示:

代码语言:javascript
运行
复制
HStack {
   Text("Some placeholder text")
   Spacer()
}

为了解决不透明的问题,您可以使用条件不透明度--最简单的方法是使用这样的三元操作符:

代码语言:javascript
运行
复制
TextEditor(text: stringProperty)        
        .opacity(stringProperty.isEmpty ? 0.25 : 1)

当然,在添加对TextEditors的支持之前,这个解决方案只是一个愚蠢的解决方案。

票数 44
EN

Stack Overflow用户

发布于 2020-12-22 09:50:57

您可以在包含占位符文本的禁用的ZStack后面使用TextEditor。例如:

代码语言:javascript
运行
复制
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()
}
票数 23
EN

Stack Overflow用户

发布于 2020-07-26 22:09:05

在我们有API支持之前,一个选项是使用绑定字符串作为占位符,并使用onTapGesture删除它。

代码语言:javascript
运行
复制
TextEditor(text: self.$note)
                .padding(.top, 20)
                .foregroundColor(self.note == placeholderString ? .gray : .primary)
                .onTapGesture {
                    if self.note == placeholderString {
                        self.note = ""
                    }
                }
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62741851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档