如何在编辑时清除 UITextView?

How to clear UITextView upon editing?

我目前有以下代码:

class NewPostController: UIViewController {

@IBOutlet weak var MessageField: UITextView!

override func viewDidLoad() {
    super.viewDidLoad()
    MessageField.text = "What's on your mind?"
    MessageField.textColor = UIColor.lightGrayColor()
}

func textViewDidBeginEditing(MessageField: UITextView) {
    if MessageField.textColor == UIColor.lightGrayColor() {
        MessageField.text = ""
        MessageField.textColor = UIColor.blackColor()
    }
}

但是,每当我编辑 MessageField 时,textViewDidBeginEditing 中的代码不会 运行。我怀疑这是因为在函数中引用 MessageField 的方式无效,但我不知道该怎么做。

您似乎没有设置 UITextViewdelegate

class ViewController: UIViewController, UITextViewDelegate {

@IBOutlet weak var myTextView: UITextView!

override func viewDidLoad() {
    super.viewDidLoad()
    myTextView.delegate = self
}

func textViewDidBeginEditing(textView: UITextView) {
    myTextView.text = String()
}

UITextViewDelegate Protocol Reference

并使@DanielStorm 的回答在 Swift 3 中有效:

func textViewDidBeginEditing(_ textView: UITextView) {
    myTextView.text = ""
}

除了已经给出的答案之外,我可能会采用将其最初是否已清除作为实例变量存储在您的 class 上的方法。在大多数用例中,用户希望只有在他们第一次开始编辑时才会清除它(以摆脱任何占位符文本):

func textViewDidBeginEditing(_ textView: UITextView) {
    if !self.textViewClearedOnInitialEdit {
        self.textView.text = ""
        self.textViewClearedOnInitialEdit = true
    }
}