저는 Swift를 배우는 중이며 UITextView에 자리 표시자를 추가하는 확장 프로그램을 만들려고합니다.저장된 속성이있는 확장자
내 생각은 2 개의 UITextView를 작성하는 것입니다. 하나는 텍스트를 자리 표시 자로 만들고, 사용자가 텍스트 편집을 시작하면 실제로 숨겨지고 다른 사용자는 다른 UITextView를 수정합니다.
그러나 여기서 나의 질문은 UITextView에서 자리 표시자를 갖는 것이 아니라이 문제를 해결하는 방법을 사용하는 방법에 관한 것입니다.
내 질문은 내가 같이 발신자 측에서 볼 것 확장 만들 내 구현을 변경해야하는 일입니다 : 지금까지
myTextView.placeholder("a placeholder text..")
을, 나는 나의의 UIViewController에서 그것을 창조하고 필요로했다 확장 기능으로 이동하려면 저장 속성이 많아서 작동하지 않습니다. 여기
내 코드입니다 :import UIKit
class ViewController: UIViewController, UITextViewDelegate {
let myTextView: UITextView = {
let textView = UITextView()
textView.tag = 0
textView.backgroundColor = UIColor.yellow
textView.layer.cornerRadius = 8
textView.translatesAutoresizingMaskIntoConstraints = false
return textView
}()
let textViewPlaceHolder: UITextView = {
let textViewPlaceHolder = UITextView()
textViewPlaceHolder.tag = 1
textViewPlaceHolder.text = "Placeholder text.."
textViewPlaceHolder.textColor = UIColor.lightGray
textViewPlaceHolder.backgroundColor = UIColor.clear
textViewPlaceHolder.translatesAutoresizingMaskIntoConstraints = false
return textViewPlaceHolder
}()
func textViewDidChange(_ textView: UITextView) {
myTextView.becomeFirstResponder()
if textView.tag == 1 && (myTextView.text != nil || myTextView.text != "") {
textView.isHidden = true
textViewPlaceHolder.resignFirstResponder()
} else if textView.tag == 0 {
if myTextView.text == nil || myTextView.text == "" {
textViewPlaceHolder.becomeFirstResponder()
myTextView.resignFirstResponder()
textViewPlaceHolder.isHidden = false
textViewPlaceHolder.text = "Placeholder text.."
}
}
}
func textViewDidBeginEditing(_ textView: UITextView) {
DispatchQueue.main.async {
self.textViewPlaceHolder.selectedRange = NSMakeRange(0, 0)
}
}
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.lightGray
view.addSubview(myTextView)
textViewConstraints()
view.addSubview(textViewPlaceHolder)
myTextViewPHConstraints()
myTextView.delegate = self
textViewPlaceHolder.delegate = self
}
func textViewConstraints() {
myTextView.widthAnchor.constraint(equalTo: self.view.widthAnchor, constant: -16).isActive = true
myTextView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
myTextView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true
myTextView.heightAnchor.constraint(equalToConstant: 200).isActive = true
}
func myTextViewPHConstraints() {
textViewPlaceHolder.widthAnchor.constraint(equalTo: self.view.widthAnchor, constant: -16).isActive = true
textViewPlaceHolder.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
textViewPlaceHolder.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true
textViewPlaceHolder.heightAnchor.constraint(equalToConstant: 200).isActive = true
}
}
내가 위에서 언급 한 바와 같이, 나는 아직도 스위프트을 배우고,이 질문은 매우 구체적인 문제를 해결하기 위해, 그것보다 더하지 않습니다, 해결하는 방법은 의미있어 신속한 확장 문제.
참고 : 위의 코드를 사용하여 자리 표시 자 문제를 해결하는 것은 완벽하지 않으므로 사용하지 마십시오.
확인이 https://stackoverflow.com/questions/25426780/how-to-have-stored-properties-in-swift-the-same- 방법 -i-had-on-objective-c – commando24