前提・実現したいこと
UITextViewにプレースホルダを表示させるようにしたのですが、現在の状態ではUITextViewにフォーカスがあてられたときはプレースホルダの文字が表示されなくなってしまいます。
フォーカスがあたっているときにはプレースホルダは表示させ、1文字でも入力があった場合にはプレースホルダを非表示にさせるようにしたいです。
該当のソースコード
swift
1 2class PostViewController: UIViewController { 3 4 @IBOutlet weak var textView: UITextView! 5 fileprivate let placeholder: String = "文字を入力してください" // プレースホルダ 6 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 11 self.textView.delegate = self 12 13 if textView.text.isEmpty { 14 textView.textColor = .darkGray 15 textView.text = placeholder 16 } 17 18 // 遷移時にtextViewにフォーカスをあてる 19 self.textView.becomeFirstResponder() 20 } 21 22 23 24 25 26extension PostViewController: UITextViewDelegate { 27 28 func textViewDidBeginEditing(_ textView: UITextView) { 29 if textView.text == placeholder { 30 textView.text = nil 31 textView.textColor = .darkText 32 } 33 } 34 35 func textViewDidEndEditing(_ textView: UITextView) { 36 if textView.text.isEmpty { 37 textView.textColor = .darkGray 38 textView.text = placeholder 39 } 40 } 41}
いただいたご回答から試したこと
Storyboardで配置していたUITextViewに対してUITextViewのクラスファイル(InspectableTextView)を作り、
ご回答いただいた下記ページを参考に試してみましたが、プレースホルダを表示させることができませんでした。
今回の対象となるViewControllerのクラスではUITextViewをIBOutletでつなげて、UITextViewに対して処理を加えているのですが、こちらがInspectableTextViewの処理と相互干渉してしまってうまくいっていないのでしょうか。
そもそも@IBDesignableの使い方が間違えているのでしょうか。
[Swift 4.2 UITextViewにプレースホルダーを追加するiOS 12 ...
【補足】
@IBDesignableについて不勉強だったこともあり、下記ページも参考にしました。
@IBDesignable使ってXcodeのAttributes Inspectorで設定 ...
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/17 16:16
2021/02/18 02:11
2021/02/18 05:29