ฉันมีคลาสย่อยที่ง่ายมากของ UITextView ที่เพิ่มฟังก์ชัน "Placeholder" ที่คุณสามารถหาค่าเนทิฟไปยังวัตถุ Text Field นี่คือรหัสของฉันสำหรับคลาสย่อย:
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
วัตถุใน Identity Inspector เป็นPlaceholderTextView
ฉันสามารถตั้งค่าPlaceholder
คุณสมบัติได้ดีใน Attribute Inspector รหัสทำงานได้ดีเมื่อเรียกใช้แอป แต่ไม่แสดงข้อความตัวยึดตำแหน่งในเครื่องมือสร้างส่วนต่อประสาน ฉันยังได้รับข้อผิดพลาดที่ไม่บล็อกดังต่อไปนี้ (ฉันคิดว่านี่เป็นสาเหตุที่มันไม่ได้แสดงผลในเวลาออกแบบ):
ข้อผิดพลาด: IB Designables: ไม่สามารถอัปเดตสถานะโครงร่างอัตโนมัติ: เครื่องมือสร้างส่วนต่อประสาน Cocoa Touch Tool ล้มเหลว
ข้อผิดพลาด: IB Designables: ไม่สามารถแสดงอินสแตนซ์ของ PlaceholderTextView: การแสดงมุมมองใช้เวลานานกว่า 200 ms รหัสรูปวาดของคุณอาจประสบกับประสิทธิภาพที่ช้า
ฉันไม่สามารถหาสาเหตุที่ทำให้เกิดข้อผิดพลาดเหล่านี้ได้ ข้อผิดพลาดที่สองไม่สมเหตุสมผลเลยเนื่องจากฉันไม่ได้เอาชนะ drawRect () ความคิดใด ๆ