我有一个非常简单的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 } } }
UITextView将Identity Inspector中的对象的类更改为后PlaceholderTextView,可以Placeholder在Attribute Inspector中将属性设置得很好。该代码在运行应用程序时效果很好,但在界面构建器中不显示占位符文本。我还会收到以下非阻塞错误(我想这就是为什么它在设计时未呈现的原因):
UITextView
PlaceholderTextView
Placeholder
错误:IB设计对象:无法更新自动版式状态:Interface Builder可可触摸工具崩溃 错误:IB设计变量:无法渲染PlaceholderTextView的实例:渲染视图花费的时间超过200毫秒。您的绘图代码可能会降低性能。
错误:IB设计对象:无法更新自动版式状态:Interface Builder可可触摸工具崩溃
错误:IB设计变量:无法渲染PlaceholderTextView的实例:渲染视图花费的时间超过200毫秒。您的绘图代码可能会降低性能。
我无法弄清楚是什么原因导致了这些错误。第二个错误没有任何意义,因为我什至没有覆盖drawRect()。有任何想法吗?
当Interface Builder Cocoa Touch Tool崩溃时,会生成崩溃报告。这些论文位于~/Library/Logs/DiagnosticReports并命名为IBDesignablesAgentCocoaTouch_*.crash。就我而言,它们包含一个有用的堆栈跟踪,该跟踪在我的代码中标识了问题。
~/Library/Logs/DiagnosticReports
IBDesignablesAgentCocoaTouch_*.crash