Tengo una subclase muy simple de UITextView que agrega la funcionalidad "Marcador de posición" que puede encontrar nativa del objeto Campo de texto. Aquí está mi código para la subclase:
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
}
}
}
Después de cambiar la clase para el UITextView
objeto en el Inspector de identidad a PlaceholderTextView
, puedo establecer la Placeholder
propiedad muy bien en el Inspector de atributos. El código funciona muy bien cuando se ejecuta la aplicación, pero no muestra el texto del marcador de posición en el generador de interfaces. También recibo los siguientes errores sin bloqueo (supongo que es por eso que no se está procesando en tiempo de diseño):
error: Designables de IB: no se pudo actualizar el estado del diseño automático: la herramienta táctil del creador de interfaces de Cocoa se bloqueó
error: Designables de IB: no se pudo procesar la instancia de PlaceholderTextView: la representación de la vista tardó más de 200 ms. Su código de dibujo puede sufrir un rendimiento lento.
No puedo entender qué está causando estos errores. El segundo error no tiene ningún sentido, ya que ni siquiera estoy anulando drawRect (). ¿Algunas ideas?