youjinp / SwiftUIKit

A collection of missing SwiftUI components
MIT License
278 stars 32 forks source link
ios spm swift swiftui

SwiftUIKit

A collection of components that will simplify and accelerate your iOS development.

Components

  1. CurrencyTextField
  2. AdaptToKeyboard (not needed for iOS 14 beta 6+)
  3. ContactPicker

Demo

There is an example app at SwiftUIKitExampleApp which can be built and run. Just clone this repo and run it.

1. CurrencyTextField

Demo

Description

Real time formatting of users input into currency format.

Usage

import SwiftUIKit

struct ContentView: View {
    @State private var value = 0.0

    var body: some View {
        //Minimal configuration
        CurrencyTextField("Amount", value: self.$value)

        //All configurations
        CurrencyTextField("Amount", value: self.$value, alwaysShowFractions: false, numberOfDecimalPlaces: 2, currencySymbol: "US$")
            .font(.largeTitle)
            .multilineTextAlignment(TextAlignment.center)
    }
}

2. AdaptToKeyboard

Demo

Description

Animate view's position when keyboard is shown / hidden

Usage

import SwiftUIKit

struct ContentView: View {
    var body: some View {
        VStack {
            Spacer()
            Button(action: {}) {
              Text("Hi")
                  .adaptToKeyboard()
            }
        }
    }
}

3. ContactPicker

Demo

Description

SwiftUI doesn't work well with CNContactPickerViewController if you just put it inside a UIViewControllerRepresentable. See this stackoverflow post. With ContactPicker here its just a one liner.

To enable multiple selection use onSelectContacts instead.

Usage

import SwiftUIKit

struct ContentView: View {
    @State var showPicker = false

    var body: some View {
        ZStack {
            // This is just a dummy view to present the contact picker,
            // it won't display anything, so place this anywhere.
            // Here I have created a ZStack and placed it beneath the main view.
            ContactPicker(
                showPicker: $showPicker,
                onSelectContact: {c in
                    self.contact = c
                }
            )
            VStack {
                Button(action: {
                    self.showPicker.toggle()
                }) {
                    Text("Pick a contact")
                }
            }
        }
    }
}