[Swift] UITextView에 여러 줄로 대응하는placeholder 추가
UITextView에 placeholder가 없습니다!?
스위프트 근처에서는 상식?그럴지도 모르지만, 스위프트를 해본 제겐 충격적이었어요.
징징거리면 옛날부터 다들 곤란한 것 같고 번잡한 샘플 코드도 많고...
plaaceholder의 복수 줄이 그곳에 대응하는 것은 필요하지 않지만, 이번에 우연히 만들려고 하기 때문이다.
UITextView에 여러 줄에 해당하는 placeholder 추가
단순히 TextView에 placeeholder를 넣고 TextView로 RX로 입력 검사를 해서 placeeholder와 같은 행동을 하도록 한다.
코드
import UIKit
import RxSwift
import SnapKit
/// 複数行対応Placeholder付きUITextView
final class UITextViewWithPlaceholder: UITextView {
private let placeholderTextView = UITextView()
private let disposeBag = DisposeBag()
init(placeholder: String = "", font: UIFont = UIFont.systemFont(ofSize: UIFont.systemFontSize)) {
super.init(frame: CGRect.zero, textContainer: nil)
// Placeholder
self.placeholderTextView.font = font
self.placeholderTextView.backgroundColor = UIColor.clear
self.placeholderTextView.isUserInteractionEnabled = false
self.placeholderTextView.textColor = UIColor(hex: ColorConstant.TEXT_PLACEHOLDER)
self.addSubview(self.placeholderTextView)
// AutoLayout
self.placeholderTextView.snp.makeConstraints{ make in
make.center.equalToSuperview()
make.width.equalToSuperview()
make.height.equalToSuperview()
}
// RX
self.rx.text.orEmpty
.subscribe(onNext: {[weak self] value in
self?.placeholderTextView.text = value.isEmpty ? placeholder : nil
}).disposed(by: disposeBag)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
이용 방법
일반적인 TextView와 마찬가지로 사용할 수 있습니다.let textView = UITextViewWithPlaceholder(placeholder: "どうして\nplaceholderないの…")
결실
감상
extension에서 UITExtView를 확장하고 UITExtViewDelegate를 합치는 방식도 괜찮다고 생각합니다. 어쨌든 이런 표준으로 제공되기를 바랍니다.
같은 느낌을 받은 사람도 있겠지.
Reference
이 문제에 관하여([Swift] UITextView에 여러 줄로 대응하는placeholder 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/J_Shell/items/a4ac3307c9d4ceed3aad
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
단순히 TextView에 placeeholder를 넣고 TextView로 RX로 입력 검사를 해서 placeeholder와 같은 행동을 하도록 한다.
코드
import UIKit
import RxSwift
import SnapKit
/// 複数行対応Placeholder付きUITextView
final class UITextViewWithPlaceholder: UITextView {
private let placeholderTextView = UITextView()
private let disposeBag = DisposeBag()
init(placeholder: String = "", font: UIFont = UIFont.systemFont(ofSize: UIFont.systemFontSize)) {
super.init(frame: CGRect.zero, textContainer: nil)
// Placeholder
self.placeholderTextView.font = font
self.placeholderTextView.backgroundColor = UIColor.clear
self.placeholderTextView.isUserInteractionEnabled = false
self.placeholderTextView.textColor = UIColor(hex: ColorConstant.TEXT_PLACEHOLDER)
self.addSubview(self.placeholderTextView)
// AutoLayout
self.placeholderTextView.snp.makeConstraints{ make in
make.center.equalToSuperview()
make.width.equalToSuperview()
make.height.equalToSuperview()
}
// RX
self.rx.text.orEmpty
.subscribe(onNext: {[weak self] value in
self?.placeholderTextView.text = value.isEmpty ? placeholder : nil
}).disposed(by: disposeBag)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
이용 방법
일반적인 TextView와 마찬가지로 사용할 수 있습니다.
let textView = UITextViewWithPlaceholder(placeholder: "どうして\nplaceholderないの…")
결실
감상
extension에서 UITExtView를 확장하고 UITExtViewDelegate를 합치는 방식도 괜찮다고 생각합니다. 어쨌든 이런 표준으로 제공되기를 바랍니다.
같은 느낌을 받은 사람도 있겠지.
Reference
이 문제에 관하여([Swift] UITextView에 여러 줄로 대응하는placeholder 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/J_Shell/items/a4ac3307c9d4ceed3aad
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여([Swift] UITextView에 여러 줄로 대응하는placeholder 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/J_Shell/items/a4ac3307c9d4ceed3aad텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)