Eu tenho uma subclasse muito simples de UITextView que adiciona a funcionalidade "Espaço reservado" que você pode encontrar nativa para o objeto Campo de texto. Aqui está o meu código para a subclasse:
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
}
}
}
Depois de alterar a classe do UITextView
objeto no Identity Inspector para PlaceholderTextView
, eu posso definir a Placeholder
propriedade muito bem no Attribute Inspector. O código funciona muito bem ao executar o aplicativo, mas não exibe o texto do espaço reservado no criador da interface. Também recebo os seguintes erros sem bloqueio (presumo que seja por isso que não seja renderizado em tempo de design):
erro: IB Designáveis: falha ao atualizar o status do layout automático: o Interface Builder Cocoa Touch Tool travou
erro: IB Designáveis: falha ao renderizar a instância do PlaceholderTextView: A renderização da exibição levou mais de 200 ms. Seu código de desenho pode sofrer com desempenho lento.
Não consigo descobrir o que está causando esses erros. O segundo erro não faz nenhum sentido, pois nem estou substituindo drawRect (). Alguma ideia?