An open source package for as-you-type formatting in SwiftUI.
Feature | Description | |
---|---|---|
:keyboard: | Responsive | Formats text as you type |
:magic_wand: | Automagical | Binds text to appropriate types |
:heavy_check_mark: | Proper | Validates and autocorrects |
:hammer_and_wrench: | Versatile | Uses snapshots and attributes |
:running_man: | Performant | O(n) differentiation algorithms |
:desert_island: | Standalone | Uses no remote dependencies |
:open_book: | Open | 100% transparent |
Simple instructions on how to install this package.
import DiffableTextViews
Swift | iOS | iPadOS | Mac Catalyst | tvOS |
---|---|---|---|---|
5.0+ | 15.0+ | 15.0+ | 15.0+ | 15.0+ |
The src="https://raw.github.com/oscbyspro/DiffableTextViews/main/le app provides quick-and-easy-to-use customization toolssrc="https://raw.github.com/oscbyspro/DiffableTextViews/main/Number | Pattern |
---|---|
![]() |
![]() |
Download this package and compile/run it with Xcode.
A text field that binds values and formats them as you type.
Feature | Description | |
---|---|---|
:iphone: | SwiftUI | Value, style, done |
:mountain: | Environment | Uses environment values |
:mag_right: | Focus | Supports SwiftUI.FocusState |
environment(\.locale, _:)
environment(\.layoutDirection, _:)
diffableTextViews_disableAutocorrection(_:)
diffableTextViews_font(_:)
diffableTextViews_foregroundColor(_:)
diffableTextViews_multilineTextAlignment(_:)
diffableTextViews_onSubmit(_:)
diffableTextViews_submitLabel(_:)
diffableTextViews_textContentType(_:)
diffableTextViews_textFieldStyle(_:)
diffableTextViews_textInputAutocapitalization(_:)
diffableTextViews_tint(_:)
A style that binds localized numbers using various formats.
Feature | Description | |
---|---|---|
:coin: | Values | Decimal, Double, (U)Int(8-64) |
:grey_question: | Optional | Standard and optional values |
:art: | Formats | Number, currency and percent |
:bricks: | Bounds | Clamps values to bounds |
:bow_and_arrow: | Precision | Up to 38 digits of precision |
:national_park: | Locales | Supports Foundation.Locale |
:two: | Bilingual | Accepts local and ASCII inputs |
import DiffableTextViews
import SwiftUI
//*============================================================================*
// MARK: * Number
//*============================================================================*
struct ContentView: View {
typealias Amount = Decimal // Decimal, Double, (U)Int(8-64), Optional<T>
//=------------------------------------------------------------------------=
// MARK: State
//=------------------------------------------------------------------------=
@State var amount = 0 as Amount
@State var currencyCode = "SEK"
@State var locale = Locale(identifier: "sv_SE")
//=------------------------------------------------------------------------=
// MARK: Accessors
//=------------------------------------------------------------------------=
var en_US: Locale {
Locale(identifier: "en_US")
}
//=------------------------------------------------------------------------=
// MARK: Body
//=------------------------------------------------------------------------=
var body: some View {
DiffableTextField(value: $amount) {
.currency(code: currencyCode)
// .bounds((0 as Amount)...) // autocorrects while view is in focus
// .precision(integer: 1..., fraction: 2) // default is appropriate
// .locale(en_US).constant() // prevents changes by the environment
}
.environment(\.locale, locale)
.diffableTextViews_keyboardType(.decimalPad)
}
}
A style that processes characters laid out in custom patterns.
Feature | Description | |
---|---|---|
:checkered_flag: | Pattern | Characters are laid out as described by a pattern |
:chess_pawn: | Placeholders | Placeholders represent not-yet-assigned values |
:fist_raised: | Independance | Supports multiple placeholders with different rules |
:ghost: | Invisibility | Pattern suffix can easily be \.hidden() |
import DiffableTextViews
import SwiftUI
//*============================================================================*
// MARK: * Pattern
//*============================================================================*
struct ContentView: View {
//=------------------------------------------------------------------------=
// MARK: State
//=------------------------------------------------------------------------=
@State var number = "123456789"
//=------------------------------------------------------------------------=
// MARK: Body
//=------------------------------------------------------------------------=
var body: some View {
DiffableTextField(value: $number) {
.pattern("+## (###) ###-##-##")
.placeholder("#") { $0.isASCII && $0.isNumber }
// .hidden(true) // hides pattern beyond last real value
// .equals(()) // skips comparisons and discards changes
}
.diffableTextViews_keyboardType(.numberPad)
}
}
Decorative styles that modify the behavior of their content.
Style | Description |
---|---|
constant() | Prevents style transformations |
equals(_:) | Binds the style's equality to a proxy value |
link |
Stars: 40 |
Last commit: 19 hours ago |
Just the latest and greatest before I look into dub dub beta software.
Also, this is commit 1000 + 1337. It must be elite, the number says so.
Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics