【问题标题】:How to clear UITextView upon editing?如何在编辑时清除 UITextView?
【发布时间】:2015-08-17 00:42:14
【问题描述】:

我目前有以下代码:

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 的方式无效,但我不知道该怎么做。

【问题讨论】:

  • 我不知道 swift,但我想你必须委派你的文本视图来执行 textViewDidVeginEditing。您必须调用 [MessageField setDelegate:self] (相当于 swift 语法)并且必须添加
  • @AdrianB,代码的细节并没有改变我可以在println("Hi") 中写入textViewDidBeginEditing 的事实,但它仍然无法运行。

标签: swift uitextview


【解决方案1】:

您似乎没有设置您的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

【讨论】:

  • func textViewDidBeginEditing(textView: UITextView) { textView.text = "" } 这也有效。
【解决方案2】:

让@DanielStorm 的答案在 Swift 3 中起作用:

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

【讨论】:

  • 问题不是如何转换为 Swift 3。而且,你的实例变量没有定义,所以很混乱。
  • 好吧,至少格式得体,我的意思是它只有 3 行。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    • 2012-02-04
    • 1970-01-01
    相关资源
    最近更新 更多