我有一个非常简单的UITextView子类,它添加了"占位符"功能,您可以找到文本字段对象的原生功能.下面是我的子类代码:
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
}
}
}
在Identity Inspector中将UITextView
对象的类更改为PlaceholderTextView
之后,我可以在Attribute Inspector中将Placeholder
属性设置得很好.该代码在运行应用程序时非常有效,但不会在界面生成器中显示占位符文本.我还得到了以下非阻塞错误(我假设这就是为什么它在设计时没有渲染):
错误:IB Designables:无法更新自动布局状态:Interface Builder Cocoa Touch工具崩溃
错误:IB Designables:无法呈现PlaceholderTextView的实例:呈现视图的时间超过200毫秒.您的绘图代码可能会受到性能降低的影响.
我找不出是什么导致了这些错误.第二个错误没有任何意义,因为我甚至没有覆盖drawRect().有什么主意吗?