Saya memiliki subkelas yang sangat sederhana dari UITextView yang menambahkan fungsionalitas "Placeholder" yang dapat Anda temukan asli pada objek Bidang Teks. Ini kode saya untuk subclass:
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
}
}
}
Setelah mengubah kelas untuk UITextView
objek di Inspektur Identitas PlaceholderTextView
, saya dapat mengatur Placeholder
properti baik-baik saja di Inspektur Atribut. Kode berfungsi dengan baik saat menjalankan aplikasi, tetapi tidak menampilkan teks placeholder di pembangun antarmuka. Saya juga mendapatkan kesalahan non-pemblokiran berikut (saya berasumsi inilah sebabnya tidak dirender pada waktu desain):
kesalahan: IB Designables: Gagal memperbarui status tata letak otomatis: Antarmuka Alat Pembuat Cocoa Touch jatuh
kesalahan: IB Designables: Gagal merender instance PlaceholderTextView: Merender tampilan membutuhkan waktu lebih dari 200 ms. Kode gambar Anda mungkin mengalami kinerja yang lambat.
Saya tidak dapat menemukan apa yang menyebabkan kesalahan ini. Kesalahan kedua tidak masuk akal, karena saya bahkan tidak mengungguli drawRect (). Ada ide?