Skip to content

A Modern Horizontal Option Selector View for SwiftUI

Notifications You must be signed in to change notification settings

p-larson/SwiftUISelector

Repository files navigation

SwiftUISelector

A perfect option picker. Great for navigation. Simple to use.

Example 1 Usage with SwiftUIPager

Try it out with @fermoya's package SwiftUIPager!

Swift Package Manager

SwiftUISelector is available through Swift Package Manager.

Add it to an existing Xcode project as a package dependency:

  1. From the File menu, select Swift Packages › Add Package Dependency…
  2. Enter "https://github.com/p-larson/SwiftUISelector" into the package repository URL text field

or

Copy and Paste SwiftUIPager.swift into your project!

Features ✨

  • Smooth Selection
  • User Control
  • Dynamic Options
  • Simple Animations

Requirements

  • iOS 14, macOS 10.15
  • Swift 5.3

Initialization

Important to note:

SelectorView<Option, OptionView>: View where Option: Hashable, OptionView: View
  1. Use Strings for Options (Intended Initializer)
// SelectorView(selectedOption: Binding<Int>, options: [String])
SelectorView(
    selectedOption: $selectedOption,
    options: ["Classial", "Star", "Zodiac", "Text Art"]
)
  1. Custom Options and Option View. (This is to give you a lot of freedom to make the SelectorView fit your needs)
/*
    SelectorView(
        selectedOption: Binding<Int>, 
        options: [Option], 
        @ViewBuilder content: @escaping (Option) -> OptionView
    )
 **/
SelectorView(selectedOption: $selectedOption, options: [1, 2, 3, 4]) { (option) in
    Text(option.description)
        .italic()
        .padding()
        .background(
            Rectangle()
            .fill(Color.clear)
            .border(Color.black, width: 2)
            .padding(.bottom, 4)
        )
}
.font(
    .system(
        size: 24,
        weight: Font.Weight.black,
        design: Font.Design.monospaced
    )
)

License

I'm not good with legal stuff, use my code as you wish, feel free to keep the credit tag in the code, idk.

Open Source, do what ever you want. Maybe follow me on Instagram I guess.