У меня есть очень простой подкласс 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 PlaceholderTextView
, я могу просто установить Placeholder
свойство в Инспекторе Атрибутов. Код прекрасно работает при запуске приложения, но не отображает текст заполнителя в конструкторе интерфейса. Я также получаю следующие неблокирующие ошибки (я полагаю, именно поэтому он не отображается во время разработки):
ошибка: IB Designables: не удалось обновить состояние автоматического макета: Интерфейсный конструктор Cocoa Touch Tool потерпел крах
ошибка: IB Designables: не удалось отобразить экземпляр PlaceholderTextView: визуализация представления заняла более 200 мс. Ваш код рисования может страдать от низкой производительности.
Я не могу понять, что является причиной этих ошибок. Вторая ошибка не имеет никакого смысла, так как я даже не переопределяю drawRect (). Любые идеи?