Ich habe eine sehr einfache Unterklasse von UITextView, die die "Platzhalter" -Funktionalität hinzufügt, die Sie im Textfeldobjekt nativ finden können. Hier ist mein Code für die Unterklasse:
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
}
}
}
Nachdem ich die Klasse für das UITextView
Objekt im Identitätsinspektor in geändert habe PlaceholderTextView
, kann ich die Placeholder
Eigenschaft im Attributinspektor einwandfrei festlegen . Der Code funktioniert hervorragend, wenn die App ausgeführt wird, zeigt jedoch den Platzhaltertext nicht im Interface Builder an. Ich erhalte auch die folgenden nicht blockierenden Fehler (ich gehe davon aus, dass dies der Grund ist, warum es zur Entwurfszeit nicht gerendert wird):
Fehler: IB Designables: Fehler beim Aktualisieren des automatischen Layoutstatus: Interface Builder Cocoa Touch Tool ist abgestürzt
Fehler: IB Designables: Fehler beim Rendern der Instanz von PlaceholderTextView: Das Rendern der Ansicht dauerte länger als 200 ms. Ihr Zeichnungscode kann unter einer langsamen Leistung leiden.
Ich kann nicht herausfinden, was diese Fehler verursacht. Der zweite Fehler macht keinen Sinn, da ich drawRect () nicht einmal überschreibe. Irgendwelche Ideen?