SwiftUI — выбор нескольких дат с помощью MultiDatePicker()

MultiDatePicker — это относительно новая функция, представленная Apple в iOS 14. Это представление SwiftUI, которое позволяет пользователю выбирать несколько дат одновременно. Это представление основано на представлении Datepicker, но оно было расширено и позволяет выбирать несколько дат, что делает его мощным инструментом для разработки приложений, требующих выбора даты.

Преимущества и реализация

Одним из основных преимуществ MultiDatePicker является простота использования. Представление реализуется с помощью одной строки кода и требует минимальной настройки. Чтобы использовать его, вы просто создаете экземпляр представления и привязываете его к частной переменной состояния типа Set‹DateComponents› с помощью оболочки свойства @State. Эта переменная будет содержать выбранные даты.

import SwiftUI

struct ContentView: View {
    
    @State private var dates: Set<DateComponents> = []
    
    var body: some View {
        VStack {
            MultiDatePicker("Select dates", selection: $dates)
                .frame(height: 300)
            
            Text("Selected dates: \(dates.count)")
                .font(.title)
        }
        .padding()
    }
}

В этом примере мы создаем представление Multidatepicker с меткой «Выбрать даты» и привязываем выбор к переменной состояния дат. Затем мы отображаем количество выбранных дат, используя текстовое представление.

Вот результат:

Показать диапазон дат

Если мы хотим отобразить диапазон дат для пользователя, мы можем сделать это, добавив диапазон дат в настройку MultiDatePicker:

struct RangeDatePicker: View {
    
    @State private var selectedDates: Set<DateComponents> = []
    @State private var startDate = Date()
    @State private var endDate = Date()
    
    var bounds: Range<Date> {
        return startDate..<endDate
    }
    
    var body: some View {
        VStack {
            Text("Selected Dates: \(selectedDates.count)")
                .font(.title)
            
            Spacer()
            
            DatePicker("Start Date", selection: $startDate, displayedComponents: [.date])
            
            DatePicker("End Date", selection: $endDate, displayedComponents: [.date])
            
            Spacer()
            
            MultiDatePicker("Select Dates", selection: $selectedDates, in: bounds)
                .frame(height: 300)
            
            Spacer()

        }
        .padding()
    }
}

В этом примере мы создаем представление с двумя средствами выбора даты для выбора дат начала и окончания диапазона. Мы также создаем переменную границ, которая возвращает диапазон дат на основе двух созданных переменных.
Затем мы создаем представление Multidatepicker с меткой «Выбрать даты» и передаем ему диапазон дат, используя «in:» параметр. Мы привязываем выделение к переменной состояния selectedDates. Представление Multidatepicker позволяет выбирать даты только в указанном диапазоне.

Я добавил Spacer() для лучшей видимости в пользовательском интерфейсе.

Заключение

MultiDatePicker – это мощный инструмент для разработчиков iOS, позволяющий с легкостью выбирать несколько дат. При его использовании обязательно привяжите выбор к частной переменной состояния, используя оболочку свойства @State. Кроме того, не забудьте указать диапазон выбираемых дат, используя параметр диапазона, когда это необходимо.

В заключение, представление Multidatepicker является ценным дополнением к структуре SwiftUI, предоставляя простой и интуитивно понятный способ выбора нескольких дат. Благодаря простоте использования и гибкости он обязательно станет основным продуктом разработки приложений для iOS.