Проблема MultiDatePicker при выборе интервала более 4 месяцев в SwiftUIIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Проблема MultiDatePicker при выборе интервала более 4 месяцев в SwiftUI

Сообщение Anonymous »

Я новичок в SwiftUI. Я пытаюсь реализовать MultiDatePicker, где пользователь может выбрать минимальные данные и максимальную дату в календаре. После выбора дат все даты, попадающие в выбранный диапазон дат, должны быть выбраны автоматически.
Вот мой код.

Код: Выделить всё

import SwiftUI

struct count: View {
@Environment(\.calendar) var calendar
@State private var dates: Set = []
let datePickerComponents: Set = [.calendar, .era, .year, .month, .day]
var datesBinding: Binding {
Binding {
dates
} set: { newValue in
if newValue.isEmpty {
dates = newValue
} else if newValue.count > dates.count {
if newValue.count == 1 {
dates = newValue
} else if newValue.count == 2 {
dates = filledRange(selectedDates: newValue)
} else if let firstMissingDate = newValue.subtracting(dates).first {
dates = [firstMissingDate]
} else {
dates = []
}
} else if let firstMissingDate = dates.subtracting(newValue).first {
dates = [firstMissingDate]
} else {
dates = []
}
}
}

var body: some View {
VStack(spacing: 50){
MultiDatePicker("Select dates", selection: datesBinding)
.frame(height: 300)

}
.padding()
}

private func filledRange(selectedDates: Set) -> Set {
let allDates = selectedDates.compactMap { calendar.date(from: $0) }
let sortedDates = allDates.sorted()
var datesToAdd = [DateComponents]()
if let first = sortedDates.first, let last = sortedDates.last {
var date = first
while date < last {
if let nextDate = calendar.date(byAdding: .day, value: 1, to: date) {
if !sortedDates.contains(nextDate) {
let dateComponents = calendar.dateComponents(datePickerComponents, from: nextDate)
datesToAdd.append(dateComponents)
}
date = nextDate
} else {
break
}
}
}
return selectedDates.union(datesToAdd)
}
}

#Preview {
count()
}
Моя проблема: она работает как шарм, когда пользователь выбирает диапазон в пределах 4 месяцев, но если пользователь выбирает максимальную дату после 4-го месяца, это не будет работать.
то есть если пользователь выбирает с 1 января по 10 января, он работает, он работает, даже если пользователь выбирает с 1 января по любую дату до апреля. Как только пользователь выбирает дату, выходящую за май, и поэтому она не работает.
Прикрепляем здесь файл GIF для лучшего понимания.
  • Gif, когда пользователь выбирает небольшой период времени, например с января по февраль, он работает должным образом.
Изображение
  • Gif-файл, когда пользователь выбирает даты более 4 месяцев, например, январь. по август, сентябрь и т. д.
Изображение


Подробнее здесь: https://stackoverflow.com/questions/793 ... in-swiftui
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Проблема MultiDatePicker при выборе интервала более 4 месяцев в SwiftUI
    Anonymous » » в форуме IOS
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Выберите дату диапазона между двумя датами в MultiDatePicker SwiftUI
    Anonymous » » в форуме IOS
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Выберите дату диапазона между двумя датами в MultiDatePicker SwiftUI
    Anonymous » » в форуме IOS
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Выберите дату диапазона между двумя датами в MultiDatePicker SwiftUI
    Anonymous » » в форуме IOS
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Выберите дату диапазона между двумя датами в MultiDatePicker SwiftUI
    Anonymous » » в форуме IOS
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous

Вернуться в «IOS»