TextField 객체의 기본 위치 인 "자리 표시 자"기능을 추가하는 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
Identity Inspector에서 객체 의 클래스를로 변경 한 후 Attribute Inspector에서 속성을 올바르게 PlaceholderTextView
설정할 수 있습니다 Placeholder
. 이 코드는 앱을 실행할 때 훌륭하게 작동하지만 인터페이스 작성기에는 자리 표시 자 텍스트를 표시하지 않습니다. 또한 다음과 같은 비 차단 오류가 발생합니다 (디자인 타임에 렌더링되지 않는 이유라고 가정).
오류 : IB 디자인 가능 : 자동 레이아웃 상태를 업데이트하지 못했습니다 : 인터페이스 빌더 Cocoa Touch Tool이 충돌했습니다
오류 : IB 디자인 가능 : PlaceholderTextView의 인스턴스를 렌더링하지 못했습니다.보기를 렌더링하는 데 200ms보다 오래 걸렸습니다. 도면 코드 성능이 저하 될 수 있습니다.
이 오류의 원인을 파악할 수 없습니다. 두 번째 오류는 drawRect ()를 재정의하지 않기 때문에 의미가 없습니다. 어떤 아이디어?