我有一个非常简单的 UITextView 子类,它添加了“ Placeholder”功能,您可以在 Text Field 对象中找到这种功能。下面是子类的代码:
import UIKit
import Foundation
@IBDesignable class PlaceholderTextView: UITextView, UITextViewDelegate
{
@IBInspectable var placeholder: String = "" {
didSet {
setPlaceholderText()
}
}
private let placeholderColor: UIColor = UIColor.lightGrayColor()
private var textColorCache: UIColor!
override init(frame: CGRect) {
super.init(frame: frame)
self.delegate = self
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.delegate = self
}
func textViewDidBeginEditing(textView: UITextView) {
if textView.text == placeholder {
textView.text = ""
textView.textColor = textColorCache
}
}
func textViewDidEndEditing(textView: UITextView) {
if textView.text == "" && placeholder != "" {
setPlaceholderText()
}
}
func setPlaceholderText() {
if placeholder != "" {
if textColorCache == nil { textColorCache = self.textColor }
self.textColor = placeholderColor
self.text = placeholder
}
}
}
在将身份检查器中的 UITextView
对象的类更改为 PlaceholderTextView
之后,我可以在属性检查器中很好地设置 Placeholder
属性。这段代码在运行应用程序时非常好用,但是在 Interface Builder 中没有显示占位符文本。我还遇到了以下非阻塞性错误(我假设这就是它在设计时不呈现的原因) :
错误: IB 设计: 未能更新自动布局状态: Interface Builder 可可触摸工具崩溃
错误: IB 可设计: 未能呈现 PlaceholderTextView 的实例: 呈现视图所花的时间超过200毫秒。您的绘图代码可能会因性能低下而受到影响。
我无法找出导致这些错误的原因。第二个错误没有任何意义,因为我甚至没有覆盖 draRect ()。有什么想法吗?