【问题标题】:Swift Month year pickerView with last 12 months最近 12 个月的 Swift Month year pickerView
【发布时间】:2017-10-25 09:48:19
【问题描述】:

我在 tableView 上有一个过滤器,它有一个“从”和“到”月份选择。

月份选择,我的意思是,当我选择月份时,datePicker 应该只显示月份年份。该列表应包含从今天开始的最近 12 个月。

我查看了默认的 UIDatePicker,但意识到不可能只获得月-年。 (Reference answer from SO)

进一步看,我发现this link 有一个自定义的月份-年份选择器,但它显示未来 15 年。而且,在选择任何行时,什么都不会发生。

有人可以帮我定制它以显示从今天开始的过去 12 个月并在选择时获取结果吗?

【问题讨论】:

  • 如果您的选择器应该只包含 12 个项目,请使用标准选择器并填充“2017 年 10 月”、“2017 年 9 月”等项目。
  • 但我如何获得过去 12 个月的数据?只需要一些逻辑来计算这些东西吗?
  • • 使用Calendar。 • 向后创建DateComponents(day: 1)enumerateDates(startingAfter:matching:options:using:),直到达到项目数。 • 将带有DateFormatter 的日期映射到字符串。 • 填充选择器
  • 不好意思问了,你有例子吗?
  • 应该先显示哪个月份?下个月应该向上还是向下滚动?

标签: ios swift uipickerview uidatepicker


【解决方案1】:

这是一个获取过去 12 个月的简单示例

var last12Months = [Date]()
let firstDayComponent = DateComponents(day: 1)
Calendar.current.enumerateDates(startingAfter: Date(), 
                 matching: firstDayComponent, 
                 matchingPolicy: .nextTime, 
                 direction: .backward, 
                 using: { (date, idx, stop) in
    if let date = date {last12Months.append(date) }
    if last12Months.count == 12 { stop = true }
})

print(last12Months)
let formatter = DateFormatter()
formatter.dateFormat = "MMMM yyyy"
print(last12Months.map({formatter.string(from: $0)}))

【讨论】:

  • 感谢 vadian...我正在检查这个...必须在我的 pickerView 中获取这个...并且在选择时,我需要所选行的值
  • 填充选择器视图非常简单。
  • 上面的代码给了我 1995 年的几个月。我不明白为什么:(你能检查一下你是否在附近吗?
  • 这个问题只发生在每年的 10 月 1 日!
  • @LohithKorupolu 我认为这是一个错误并将其报告给Apple。
猜你喜欢
  • 1970-01-01
  • 2012-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-04
  • 1970-01-01
  • 2020-09-17
相关资源
最近更新 更多