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

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

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

Q&A

0回答

1059閲覧

SwiftUIでUITextFieldを使用した際に、文字入力後TextFieldを空にする方法がわかりません。

maron1220

総合スコア18

0グッド

0クリップ

投稿2020/06/23 07:48

編集2020/06/23 07:49

SwiftuiにUIKitのTextFieldを入れて使用しています。
SwiftUI独自のTextFieldでは文字入力に不具合があるためです。

クリアボタン並びに登録ボタンを押したあとにテキストフィールド内を空にしたいのですが、表示上空にすることができません。

登録ボタンを押した直後に、登録ボタンのdisabledは認識されますが、画面表示は残ってしまいます。

よろしくお願いいたします。

swift

1import SwiftUI 2import CoreData 3 4struct InputMenuView: View { 5 6 @Environment(.managedObjectContext) var context 7 8 func addMessage(){ 9 let newMessage = BtList(context: context) 10 newMessage.id = UUID() 11 newMessage.isComplete = false 12 newMessage.message = registerMessage 13 newMessage.saveDate = Date() 14 do{ 15 try context.save() 16 }catch{ 17 print(error) 18 } 19 } 20 21 @State var registerMessage = "" 22 23 24 var textFieldWidth = UIScreen.main.bounds.width*9/10 25 var body: some View { 26 VStack{ 27 HStack{ 28 //キャンセルボタン 29 Button(action:{ 30 self.registerMessage = "" 31 32 UIApplication.shared.endEditing() 33 }){ 34 Image(systemName: "xmark.circle").font(.title) 35 } 36 Spacer() 37 38 //登録ボタン 39 Button(action:{ 40 self.addMessage() 41 print(self.registerMessage) 42 self.registerMessage = "" 43 print("(self.registerMessage)です。") 44 }){ 45 Image(systemName: "plus.circle").font(.title) 46 }.disabled(self.registerMessage.isEmpty) 47 48 }//HStack 49 MakeTextField(title: "#今日の体調",text:self.$registerMessage ) 50 .fixedSize() 51 52 }//VStack 53}//body 54}//View

swift

1 2import SwiftUI 3 4var textFieldWidth = UIScreen.main.bounds.width 5var textFieldHeight = 5 6 7final class _TextFieldCoordinator: NSObject { 8 var control: MakeTextField 9 10 init(_ control: MakeTextField) { 11 self.control = control 12 super.init() 13 control.textField.addTarget(self, action: #selector(textFieldEditingDidBegin(_:)), for: .editingDidBegin) 14 control.textField.addTarget(self, action: #selector(textFieldEditingDidEnd(_:)), for: .editingDidEnd) 15 control.textField.addTarget(self, action: #selector(textFieldEditingChanged(_:)), for: .editingChanged) 16 control.textField.addTarget(self, action: #selector(textFieldEditingDidEndOnExit(_:)), for: .editingDidEndOnExit) 17 } 18 19 @objc private func textFieldEditingDidBegin(_ textField: UITextField) { 20 control.onEditingChanged(true) 21 } 22 23 @objc private func textFieldEditingDidEnd(_ textField: UITextField) { 24 control.onEditingChanged(false) 25 } 26 27 @objc private func textFieldEditingChanged(_ textField: UITextField) { 28 control.text = textField.text ?? "" 29 } 30 31 @objc private func textFieldEditingDidEndOnExit(_ textField: UITextField) { 32 control.onCommit() 33 } 34} 35 36struct MakeTextField: UIViewRepresentable { 37 38 private let title: String? 39 @Binding var text: String 40 let onEditingChanged: (Bool) -> Void 41 let onCommit: () -> Void 42 43 let textField = UITextField() 44 45 init(title: String?, text: Binding<String>, onEditingChanged: @escaping (Bool) -> Void = { _ in }, onCommit: @escaping () -> Void = {}) { 46 self.title = title 47 self._text = text 48 self.onEditingChanged = onEditingChanged 49 self.onCommit = onCommit 50 } 51 52 func makeCoordinator() -> _TextFieldCoordinator { 53 _TextFieldCoordinator(self) 54 } 55 56 func makeUIView(context: Context) -> UITextField { 57 textField.placeholder = title 58 textField.delegate = context.coordinator as? UITextFieldDelegate 59// textField.backgroundColor = UIColor.gYellow 60 61 textField.borderStyle = UITextField.BorderStyle.roundedRect 62 textField.frame = CGRect(x: 0, y: 0, width: Int(textFieldWidth), height: Int(textFieldWidth)/8) 63 return textField 64 } 65 66 func updateUIView(_ uiView: UITextField, context: Context) { 67 } 68} 69

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問