Skip to content

Latest commit

 

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RSRangedDateTimePicker

RSRangedDateTimePicker is a versatile SwiftUI and UIKit compatible library for displaying customizable date and time pickers with range selection support.

date style = .date time style = .time
dateRange style = .dateRange timeRange style = .timeRange

Features

  • SwiftUI and UIKit compatible
  • Single date/time or range selection
  • Customizable date and time formats
  • Configurable minimum and maximum dates
  • Adjustable time intervals
  • Supports both modal presentation and in-view embedding

Requirements

  • iOS 16.0+
  • Swift 5.10+

Installation

Swift Package Manager

Add the following line to your Package.swift file:

.package(url: "https://github.com/RanduSoft/RSRangedDateTimePicker.git", from: "2.0.0")

Usage

Check out the DemoView.swift file or the examples below:

SwiftUI

import SwiftUI
import RSRangedDateTimePicker

struct ContentView: View {
    @State private var showPicker = false
    @State private var selectedRange = PickerView.DateRange(start: Date(), end: Date())
    
    var body: some View {
        VStack {
            Button("Show Date Range Picker") {
                showPicker = true
            }
            
            List {
                HStack {
                    Text("Start")
                    Spacer()
                    Text(selectedRange.start, style: .date)
                        .foregroundStyle(.secondary)
                }
                
                HStack {
                    Text("End")
                    Spacer()
                    Text(selectedRange.end, style: .date)
                        .foregroundStyle(.secondary)
                }
            }
        }
        .sheet(isPresented: $showPicker) {
            RSRangedDateTimePickerView(style: .dateRange(), selectedRange: $selectedRange)
        }
    }
}

UIKit

import UIKit
import RSRangedDateTimePicker

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let button = UIButton(type: .system)
        button.setTitle("Show Picker", for: .normal)
        button.addTarget(self, action: #selector(showPicker), for: .touchUpInside)
        view.addSubview(button)
        button.center = view.center
    }
    
    @objc func showPicker() {
        RSRangedDateTimePickerViewController.show(
            on: self,
            style: .dateRange(),
            onRangeSelected: { range in
                print("Selected range: \(range.start) - \(range.end)")
            }
        )
    }
    
    @objc func showPickerAlt() {
        let datePickerVC = RSRangedDateTimePickerViewController(style: .date())
        datePickerVC.onDateSelected = { newDate in
            print(newDate)
        }
        datePickerVC.onRangeSelected = { dateRange in
            print(dateRange.start, dateRange.end)
        }
        datePickerVC.onDismiss = {
            print("onDismiss")
        }
        datePickerVC.modalPresentationStyle = .overCurrentContext
        self.present(datePickerVC, animated: false)
    }
}

Note

Each style will only use its initial (optional) variable. Make sure to use

initialDate for style = .date / .time

or

initialRange for style = .dateRange / .timeRange

Customization

You can customize the picker's appearance and behavior by adjusting the Style and Config parameters:

let customConfig = PickerView.Config(
    minimumDate: Date(),
    maximumDate: Date().addingTimeInterval(86400 * 30),
    minutesInterval: 30,
    minimumMultipleOfMinutesIntervalForRangeDuration: 2,
    calendar: Calendar.current
)

let customStyle = PickerView.Style.dateRange(formatter: {
    let formatter = DateFormatter()
    formatter.dateFormat = "MMM d, yyyy"
    return formatter
}())

Use these customStyle and customConfig in both SwiftUI and UIKit.

The "Save" button foreground color is the app tint color. The button title can be customized via the saveButtonTitle parameter:

RSRangedDateTimePickerView(style: .dateRange(), selectedRange: $selectedRange, saveButtonTitle: "Done")

License

RSRangedDateTimePicker is available under the MPL-2.0 license. See the LICENSE file for more info.

About

A versatile SwiftUI and UIKit compatible library for displaying customizable date and time pickers with range selection support.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages