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