У мене дуже простий підклас UITextView, який додає функцію «Замісник місця», яку ви можете знайти рідною для об'єкта «Текстове поле». Ось мій код підкласу:
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
}
}
}
Після зміни класу UITextView
об’єкта в інспекторі ідентичності на PlaceholderTextView
я можу встановити Placeholder
властивість просто в інспекторі атрибутів. Код чудово працює під час роботи програми, але не відображає текст заповнювача у конструкторі інтерфейсів. Я також отримую такі неблокуючі помилки (я припускаю, що це не відображається під час проектування):
помилка: IB Designables: Не вдалося оновити статус автоматичного макета: Інтерфейс Builder Cocoa Touch Tool вийшов з ладу
помилка: IB Designables: Не вдалося вивести примірник PlaceholderTextView: Надання подання тривало більше 200 мс. Ваш малюнковий код може страждати від повільних показників.
Я не в змозі зрозуміти, що викликає ці помилки. Друга помилка не має жодного сенсу, оскільки я навіть не перекреслює drawRect (). Будь-які ідеї?