Tôi có một lớp con UITextView rất đơn giản có thêm chức năng "Giữ chỗ" mà bạn có thể tìm thấy tự nhiên cho đối tượng Trường văn bản. Đây là mã của tôi cho lớp con:
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
}
}
}
Sau khi thay đổi lớp cho UITextView
đối tượng trong Trình kiểm tra danh tính thành PlaceholderTextView
, tôi có thể đặt thuộc Placeholder
tính tốt trong Trình kiểm tra thuộc tính. Mã này hoạt động rất tốt khi chạy ứng dụng, nhưng không hiển thị văn bản giữ chỗ trong trình tạo giao diện. Tôi cũng nhận được các lỗi không chặn sau đây (tôi cho rằng đây là lý do tại sao nó không hiển thị tại thời điểm thiết kế):
lỗi: IB Designables: Không thể cập nhật trạng thái bố cục tự động: Interface Builder Ca cao Touch Tool bị lỗi
lỗi: IB Designables: Không thể hiển thị phiên bản của PlaceholderTextView: Hiển thị chế độ xem mất hơn 200 ms. Mã bản vẽ của bạn có thể bị hiệu suất chậm.
Tôi không thể tìm ra nguyên nhân gây ra những lỗi này. Lỗi thứ hai không có ý nghĩa gì, vì tôi thậm chí không ghi đè drawRect (). Có ý kiến gì không?