Ho una sottoclasse molto semplice di UITextView che aggiunge la funzionalità "Segnaposto" che puoi trovare nativa nell'oggetto Campo di testo. Ecco il mio codice per la sottoclasse:
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
}
}
}
Dopo aver modificato la classe per l' UITextView
oggetto in Identity Inspector in PlaceholderTextView
, posso impostare Placeholder
bene la proprietà in Attribute Inspector. Il codice funziona benissimo quando si esegue l'app, ma non mostra il testo segnaposto nel builder di interfacce. Ottengo anche i seguenti errori non bloccanti (suppongo che questo sia il motivo per cui non viene visualizzato in fase di progettazione):
errore: IB Designables: impossibile aggiornare lo stato del layout automatico: Interface Builder Cocoa Touch Tool si è bloccato
errore: IB Designables: impossibile eseguire il rendering dell'istanza di PlaceholderTextView: il rendering della vista ha richiesto più di 200 ms. Il codice del disegno potrebbe subire rallentamenti.
Non sono in grado di capire cosa sta causando questi errori. Il secondo errore non ha alcun senso, poiché non ho nemmeno la precedenza su drawRect (). Qualche idea?