前提・実現したいこと
一つの画面に一行のテキストフィールドと、複数行のテキストフィールドを配置したいのですが、
一行のテキストフィールドをTextFieldのコード、複数行のテキストフィールドをUITextViewを活用すると、見た目や挙動が若干異なってしまいます。
【異なる現象】
・TextFieldの「タイトルを入力」の色が普通の.grayと異なりどの色かわからない
・TextFieldだとEdit状態でも入力が空なら「タイトルを入力」と表示されたままだが、UITextViewではEdit状態になると入力が空でも「注目ポイントを入力」が消えてしまう
統一感を出し、画面の見栄えがよくなる方法があれば教えてください。
(例えば、UITextViewを改行できなくさせて一行のみにする、UITextViewでもTextFieldと同じ色・挙動にするなど)
スクリーンショット
該当のソースコード
SwiftUI
1import SwiftUI 2 3struct MultiLineTextField: UIViewRepresentable { 4 @Binding var text: String 5 6 func makeCoordinator() -> Coordinator { 7 MultiLineTextField.Coordinator(parent1: self) 8 } 9 10 func makeUIView(context: Context) -> UITextView { 11 let textView = UITextView() 12 textView.delegate = context.coordinator 13 textView.isScrollEnabled = true 14 textView.isEditable = true 15 textView.isUserInteractionEnabled = true 16 textView.text = "注目ポイントを入力(任意)" 17 textView.textColor = .gray 18 textView.font = .systemFont(ofSize: 16) 19 return textView 20 } 21 22 func updateUIView(_ uiView: UITextView, context: Context) { 23 } 24 25 class Coordinator: NSObject, UITextViewDelegate { 26 var parent : MultiLineTextField 27 28 init(parent1: MultiLineTextField) { 29 parent = parent1 30 } 31 32 func textViewDidBeginEditing(_ textView: UITextView) { 33 if self.parent.text == "" { 34 textView.text = "" 35 textView.textColor = .black 36 } 37 } 38 39 internal func textViewDidEndEditing(_ textView: UITextView) { 40 if self.parent.text == "" { 41 textView.text = "注目ポイントを入力(任意)" 42 textView.textColor = .gray 43 } 44 } 45 46 } 47}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/15 14:55