Mam bardzo prostą podklasę UITextView, która dodaje funkcję „Placeholder”, którą można znaleźć natywną dla obiektu Text Field. Oto mój kod dla podklasy:
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
}
}
}
Po zmianie klasy UITextView
obiektu w Inspektorze tożsamości na PlaceholderTextView
, mogę dobrze ustawić Placeholder
właściwość w Inspektorze atrybutów. Kod działa świetnie podczas uruchamiania aplikacji, ale nie wyświetla tekstu zastępczego w konstruktorze interfejsu. Otrzymuję również następujące błędy nieblokujące (zakładam, że dlatego nie renderuje się w czasie projektowania):
błąd: IB Designables: Nie udało się zaktualizować stanu automatycznego układu: Awaria narzędzia Interface Builder Cocoa Touch Tool
błąd: IB Designables: nie udało się wyrenderować instancji PlaceholderTextView: Renderowanie widoku trwało dłużej niż 200 ms. Twój kod rysowania może mieć niską wydajność.
Nie jestem w stanie dowiedzieć się, co powoduje te błędy. Drugi błąd nie ma żadnego sensu, ponieważ nawet nie nadpisuję funkcji drawRect (). Jakieś pomysły?