質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1639閲覧

SwiftUIでUITextFieldのテキストの初期値を表示したい

micro_pterus

総合スコア1

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/08/26 11:47

前提・実現したいこと

こんにちは。
SwiftUIでUITextFieldを使う方法について、皆様のお力をお借りできればと思います。
UIViewRepresentableを用いてUITextFieldを表示するところまでは記述できたのですが、Bindingする変数の初期値がViewに反映されず、困っています。
以下のソースコードからViewの表示時にTextField内に"sample"と表示するためにはどうすればいいでしょうか?
ご教授よろしくお願いします。

該当のソースコード

SwiftUI

1struct ContentView: View { 2 @State var text = "sample" 3 var body: some View { 4 MyTextField("", text: $text) 5 } 6} 7 8 9class MyTextFieldCoordinator: NSObject { 10 var control: MyTextField 11 12 init(_ control: MyTextField) { 13 self.control = control 14 super.init() 15 control.textField.addTarget(self, action: #selector(textFieldEditingDidBegin(_:)), for: .editingDidBegin) 16 control.textField.addTarget(self, action: #selector(textFieldEditingDidEnd(_:)), for: .editingDidEnd) 17 control.textField.addTarget(self, action: #selector(textFieldEditingChanged(_:)), for: .editingChanged) 18 control.textField.addTarget(self, action: #selector(textFieldEditingDidEndOnExit(_:)), for: .editingDidEndOnExit) 19 } 20 21 @objc private func textFieldEditingDidBegin(_ textField: UITextField) { 22 control.onEditingChanged(true) 23 } 24 25 @objc private func textFieldEditingDidEnd(_ textField: UITextField) { 26 control.onEditingChanged(false) 27 } 28 29 @objc private func textFieldEditingChanged(_ textField: UITextField) { 30 control.text = textField.text ?? "" 31 } 32 33 @objc private func textFieldEditingDidEndOnExit(_ textField: UITextField) { 34 control.onCommit() 35 } 36} 37 38struct MyTextField: UIViewRepresentable { 39 40 private let title: String? 41 @Binding var text: String 42 let onEditingChanged: (Bool) -> Void 43 let onCommit: () -> Void 44 45 let textField = UITextField() 46 47 init(_ title: String?, text: Binding<String>, onEditingChanged: @escaping (Bool) -> Void = { _ in }, onCommit: @escaping () -> Void = {}) { 48 self.title = title 49 self._text = text 50 self.onEditingChanged = onEditingChanged 51 self.onCommit = onCommit 52 } 53 54 func makeCoordinator() -> MyTextFieldCoordinator { 55 MyTextFieldCoordinator(self) 56 } 57 58 func makeUIView(context: Context) -> UITextField { 59 textField.placeholder = title 60 textField.delegate = context.coordinator as? UITextFieldDelegate 61 return textField 62 } 63 64 func updateUIView(_ uiView: UITextField, context: Context) { 65 } 66}

補足情報(FW/ツールのバージョンなど)

Xcodeのバージョンは11.6です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

解決しました。
MyTextFieldのinitに以下の1行を加えることで初期値を反映できました。

swift

1self.textField.text = text.wrappedValue

投稿2020/08/27 01:22

micro_pterus

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問