📝
SwiftUI のTextField で入力できる文字数を制限する
「テキストフィールドに入力できる文字をx文字までに制限したい」という場面があります。
Combine
フレームワークをインポートし、onReceive
でJust
パブリッシャーを使うことでその挙動が実現できました。
コード
import SwiftUI
import Combine
let maxCharacterLength = Int(6)
struct YourView: View {
@State private var text = String("")
var body: some View {
TextField("", text: $text)
.onReceive(Just(text), perform: { _ in
if maxCharacterLength < text.count {
text = String(text.prefix(maxCharacterLength))
}
})
}
}
Discussion
こちらの記事参考になりました。変数のところが
text
だったのでプロパティと名前被ってたので最初はハマりました💦こんな感じでできた🙌