当前位置: 首页 > 知识库问答 >
问题:

在Swift中的UITextView中添加占位符文本?

石喜
2023-03-14

如何在UITextView中添加占位符,类似于在Swift中为UITextField设置的占位符?

共有1个答案

巢德华
2023-03-14

为Swift 4更新

UITExtView本身没有占位符属性,因此必须使用UITExtViewDelegate方法以编程方式创建和操作一个占位符属性。根据需要的行为,我建议使用下面的解决方案#1或#2。

注意:对于任何一种解决方案,都可以将UITExtViewDelegate添加到类中,并设置textView.delegate=self以使用文本视图的委托方法。

textView.text = "Placeholder"
textView.textColor = UIColor.lightGray
func textViewDidBeginEditing(_ textView: UITextView) {
    if textView.textColor == UIColor.lightGray {
        textView.text = nil
        textView.textColor = UIColor.black
    }
}

然后,当用户编辑完文本视图并将其作为第一响应者退出时,如果文本视图为空,则通过重新添加占位符文本并将其颜色设置为浅灰色来重置其占位符。

func textViewDidEndEditing(_ textView: UITextView) {
    if textView.text.isEmpty {
        textView.text = "Placeholder"
        textView.textColor = UIColor.lightGray
    }
}

解决方案#2-如果您希望在文本视图为空时显示占位符,即使文本视图已选中:

首先在viewdidload中设置占位符:

textView.text = "Placeholder"
textView.textColor = UIColor.lightGray

textView.becomeFirstResponder()

textView.selectedTextRange = textView.textRange(from: textView.beginningOfDocument, to: textView.beginningOfDocument)
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {

    // Combine the textView text and the replacement text to
    // create the updated text string
    let currentText:String = textView.text
    let updatedText = (currentText as NSString).replacingCharacters(in: range, with: text)

    // If updated text view will be empty, add the placeholder
    // and set the cursor to the beginning of the text view
    if updatedText.isEmpty {

        textView.text = "Placeholder"
        textView.textColor = UIColor.lightGray

        textView.selectedTextRange = textView.textRange(from: textView.beginningOfDocument, to: textView.beginningOfDocument)
    }

    // Else if the text view's placeholder is showing and the
    // length of the replacement string is greater than 0, set 
    // the text color to black then set its text to the
    // replacement string
     else if textView.textColor == UIColor.lightGray && !text.isEmpty {
        textView.textColor = UIColor.black
        textView.text = text
    }

    // For every other case, the text should change with the usual
    // behavior...
    else {
        return true
    }

    // ...otherwise return false since the updates have already
    // been made
    return false
}
func textViewDidChangeSelection(_ textView: UITextView) {
    if self.view.window != nil {
        if textView.textColor == UIColor.lightGray {
            textView.selectedTextRange = textView.textRange(from: textView.beginningOfDocument, to: textView.beginningOfDocument)
        }
    }
}
 类似资料:
  • 问题内容: 我正在制作一个使用的应用程序。现在,我希望“文本视图”具有一个类似于您可以为“文本字段”设置的占位符。您将如何使用Swift完成此任务? 问题答案: 为Swift 4更新 本身并不具有占位符属性,因此您必须使用方法以编程方式创建和操作一个占位符。我建议根据所需的行为使用下面的解决方案#1或#2。 注意:对于这两种解决方案,请添加到类中并设置为使用文本视图的委托方法。 解决方案#1- 如

  • 问题内容: 嗨,有快速错误“源文件中的快速编辑器占位符”的问题, 这是我的代码 问题答案: 我在SO上发现了相同的问题很多次。但是他们都没有给出我 想要的答案。 你得到的Placeholder in source file,当你有其中之一(它 说:“串”用蓝色背景)在你的代码。 占位符适用于我们的程序员。它说:“这里应该是String类型的值”。您可以单击它并开始键入,以简单地将其替换为例如变量名

  • 我可以在苹果Notes和其他Notes app中看到,它们有表格嵌入到文本编辑器中。Swift有NSTextTable,但它只适用于macOS。我想知道我怎么能给macOS和iOS都添加一个表呢? 此外,这些表应该是交互式的,就像在Apple Notes中一样,我可以添加一行或列,移动它们,等等。我看过这个项目,它可以让你嵌入一个NS/UIView到编辑器中,但这似乎更像是一个黑客。 有什么想法吗

  • 我想将占位符添加到类似于HTML5占位符属性的TextField,但我找不到合适的方法。有没有或唯一的方法是实现自己?

  • 问题内容: 您好,我正在实现图形数据结构。当我尝试构建应用程序时,出现错误“源文件中的编辑器占位符” 完整的图形实现是从WayneBishop的GitHub此处https://github.com/waynewbishop/SwiftStructures提取的 我将课程更改为: 到目前为止,我在构建的所有代码中均发生了5次此错误。也有人问过这个问题,但没有回答。 我认为该错误可能是由于我对课程的更

  • 问题内容: 以这个非常简单的形式为例: 这将在模板中呈现: 但是,我想将属性值添加到此字段,以便HTML看起来像这样: 最好我想通过字典或类似的东西将占位符值传递给表单类中的: 做到这一点的最佳方法是什么? 问题答案: 是的,更多的写作,但是分离可以更好地抽象更复杂的情况。 你也可以声明包含一个属性直接映射你的子类。