TextField 같은 경우는 기본적으로 제공되는 기능입니다 하지만 TextField 같은경우는 한줄로만 표현할수 있어서,
TextView 를 통해 입력값을 받는 경우도 자주 있습니다 이번엔 TextView 에 PlaceHolder를 간단하게 달아보겠습니다
초기 보여줄 상태에 대해 초기화를 진행하고
텍스트를 입력하기 시작할때 현재 상태에 대해 비교를 합니다 (색상이 아닌, placeHolder 문자열로 비교 가능) -> textViewDidBeginEditing
입력을 마무리 했을경우 해당 문자열을 비교해서 PlaceHolder 를 재 구성 합니다. -> textViewDidEndEditing
1. 일반적인 방법
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var mTextView: UITextView!
let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
mTextView.textColor = UIColor.lightGray
mTextView.text = "일반 TextView 입니다."
mTextView.delegate = self
}
}
extension ViewController : UITextViewDelegate {
func textViewDidBeginEditing(_ textView: UITextView) {
if textView.textColor == UIColor.lightGray {
textView.text = nil
textView.textColor = UIColor.black
}
}
func textViewDidEndEditing(_ textView: UITextView) {
if textView.text.isEmpty {
textView.text = "일반 TextView 입니다."
textView.textColor = UIColor.lightGray
}
}
}
2. RxSwift
import UIKit
import RxSwift
import RxCocoa
class ViewController: UIViewController {
@IBOutlet weak var mRxTextView: UITextView!
let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
mRxTextView.textColor = UIColor.lightGray
mRxTextView.text = "Rx TextView 입니다."
mRxTextView.rx.didBeginEditing
.subscribe(onNext : {
[self] _ in
if mRxTextView.textColor == UIColor.lightGray {
mRxTextView.text = nil
mRxTextView.textColor = UIColor.black
}
}).disposed(by: disposeBag)
mRxTextView.rx.didEndEditing
.subscribe(onNext : {
[self] _ in
if mRxTextView.text.isEmpty {
mRxTextView.text = "Rx TextView 입니다."
mRxTextView.textColor = UIColor.lightGray
}
}).disposed(by: disposeBag)
}
}
3. Done 버튼 달기
extension UITextView {
func addDoneButton(title: String, target: Any, selector: Selector) {
let toolBar = UIToolbar(frame: CGRect(x: 0.0,
y: 0.0,
width: UIScreen.main.bounds.size.width,
height: 44.0))
let flexible = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let barButton = UIBarButtonItem(title: title, style: .plain, target: target, action: selector)
toolBar.setItems([flexible, barButton], animated: false)
self.inputAccessoryView = toolBar
}
}
class ViewController: UIViewController {
@IBOutlet weak var mTextView: UITextView!
let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
mTextView.addDoneButton(title: "Done", target: self, selector: #selector(textDone(sender:)))
}
@objc func textDone(sender: Any) {
self.view.endEditing(true)
}
}
4. 실행결과
'IOS' 카테고리의 다른 글
Swift - Firebase Dynamic Link (0) | 2021.11.27 |
---|---|
SwiftUI - YoutubeKitPlayer (0) | 2021.11.17 |
Swift - Combine VS RxSwift (0) | 2021.08.21 |
Swift - UITableView + ListClick (0) | 2021.08.13 |
Swift - Property Wrapper (0) | 2021.08.06 |