前提
SwiftUIのテキストフィールドについてです。
入力されたデータをmodelDataに入れています。
Textfieldの引数のvalueに$modelData.costのように入れて使っています。
実現したいこと
- テキストフィールドに入力するときに元から入っていた数値を0に置き換えたい。
発生している問題・エラーメッセージ
.onChangeでテキストフィールドにフォーカスインしたタイミングでvalue = 0 としているのですが反映されません。
該当のソースコード
Swift
1import SwiftUI 2import Combine 3 4struct FormInfo<T:Numeric> : View { 5 @ObservedObject var modelData: ModelData 6 @Binding var value: T 7 @FocusState var textfieleFoucused: Bool 8 9 var title: String 10 var unit: String 11 12 private let numberFormatter: NumberFormatter = { 13 let f = NumberFormatter() 14 f.numberStyle = .decimal 15 f.zeroSymbol = "" 16 f.isLenient = true 17 return f 18 }() 19 20 var body: some View { 21 HStack { 22 Text(title) 23 TextField("0", value: $value, formatter: numberFormatter) 24 .focused($textfieleFoucused) 25 .keyboardType(.numbersAndPunctuation) 26 .multilineTextAlignment(.trailing) 27 .onSubmit { 28 if ((modelData.profitRate + modelData.commission) >= 100) { 29 modelData.profitRate = 0.0 30 modelData.commission = 0.0 31 } 32 } 33 Text(unit) 34 } 35 .onChange(of: textfieleFoucused) { newValue in 36 if newValue { 37 value = 0 38 print("フォーカスイン") 39 } else { 40 print("フォーカスアウト") 41 } 42 } 43 } 44} 45 46import Foundation 47 48final class ModelData: ObservableObject { 49 @Published var cost: Int = 0 50 @Published var postage: Int = 0 51 @Published var commission: Double = 0.0 52 @Published var profit: Int = 0 53 @Published var profitRate: Double = 0.0 54 @Published var sellPrice: Int = 0 55 @Published var memo: String = "" 56 @Published var commisionToggle: Bool = false 57} 58
試したこと
$valueにしてみましたがエラーになりました。
補足情報(FW/ツールのバージョンなど)
Xcode13.3
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2022/04/12 13:30
2022/04/12 13:38