はじめに
TextFieldで数字を扱いたいときに、数字を文字列に変換して、
使うとき数値に戻すといった面倒なことをしてる人いますよね
私もそれやってました。
iOS15からTextFiledで直接数値を扱えるようになったらしいんです。
気づきませんでした。
サンプルアプリ
実装
import SwiftUI
struct ContentView: View {
@State var value: Decimal.FormatStyle.FormatInput = 0.0
@State var int: Int = 0
@State var double: Double = 0.0
@State var float: Float = 0.0
var body: some View {
VStack {
GroupBox("NSDecimal") {
Text(value.description)
TextField("", value: $value, format: .number)
.textFieldStyle(.roundedBorder)
}
GroupBox("Int") {
Text(int.description)
TextField("Int", value: $int, format: .number)
.textFieldStyle(.roundedBorder)
}
GroupBox("Double") {
Text(double.description)
TextField("Double", value: $double, format: .number)
.textFieldStyle(.roundedBorder)
}
GroupBox("Float") {
Text(float.description)
TextField("Float", value: $float, format: .number)
.textFieldStyle(.roundedBorder)
}
}
// ここでキーボードを数字のみにしている
.keyboardType(.decimalPad)
.padding(20)
}
}
数字ではないものも入力できる
.keyboardType(.decimalPad)
の指定をなくせば、数字以外も入力できるようになります。
しかし、@Stateに流れてくる値は数値です。
不要な文字列があるとその前までの、正常な部分までが@Stateに流れてくる仕様っぽいです。
有能すぎますね。
おわり
こんな機能がiOS15で登場してたなんて、、、
公式ドキュメント