如何在编辑时清除 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
的方式无效,但我不知道该怎么做。
您似乎没有设置 UITextView
的 delegate
。
class ViewController: UIViewController, UITextViewDelegate {
@IBOutlet weak var myTextView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
myTextView.delegate = self
}
func textViewDidBeginEditing(textView: UITextView) {
myTextView.text = String()
}
并使@DanielStorm 的回答在 Swift 3 中有效:
func textViewDidBeginEditing(_ textView: UITextView) {
myTextView.text = ""
}
除了已经给出的答案之外,我可能会采用将其最初是否已清除作为实例变量存储在您的 class 上的方法。在大多数用例中,用户希望只有在他们第一次开始编辑时才会清除它(以摆脱任何占位符文本):
func textViewDidBeginEditing(_ textView: UITextView) {
if !self.textViewClearedOnInitialEdit {
self.textView.text = ""
self.textViewClearedOnInitialEdit = true
}
}
我目前有以下代码:
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
的方式无效,但我不知道该怎么做。
您似乎没有设置 UITextView
的 delegate
。
class ViewController: UIViewController, UITextViewDelegate {
@IBOutlet weak var myTextView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
myTextView.delegate = self
}
func textViewDidBeginEditing(textView: UITextView) {
myTextView.text = String()
}
并使@DanielStorm 的回答在 Swift 3 中有效:
func textViewDidBeginEditing(_ textView: UITextView) {
myTextView.text = ""
}
除了已经给出的答案之外,我可能会采用将其最初是否已清除作为实例变量存储在您的 class 上的方法。在大多数用例中,用户希望只有在他们第一次开始编辑时才会清除它(以摆脱任何占位符文本):
func textViewDidBeginEditing(_ textView: UITextView) {
if !self.textViewClearedOnInitialEdit {
self.textView.text = ""
self.textViewClearedOnInitialEdit = true
}
}