【发布时间】:2018-07-23 16:07:02
【问题描述】:
我有一个日期选择器,用户可以在其中选择他们的出生日期。我设置了一个最大日期,因此 2000 年以后出生的用户无法使用该应用程序。下面是我的代码。
class ViewController: UIViewController {
@IBOutlet weak var datePicker: UIDatePicker!
override func viewDidLoad() {
super.viewDidLoad()
datePicker.maximumDate = Date.earliestValidDate
datePicker.date = Date.initialDate
}
@IBAction func didSelectDate(_ sender: UIDatePicker) {
if sender.date > Date.earliestValidDate {
print("Invalid date!")
return
}
print(DateFormatter.localizedString(from: sender.date, dateStyle: .medium, timeStyle: .none))
}
}
extension Date {
public static var earliestValidDate: Date {
let calendar = Calendar(identifier: .gregorian)
return calendar.date(byAdding: .year, value: -18, to: Date())!
}
public static var initialDate: Date {
var components = DateComponents()
components.year = 1995
components.month = 1
components.day = 1
let calendar = Calendar(identifier: .gregorian)
return calendar.date(from: components)!
}
}
我的问题有点与可用性有关。比如说,用户选择了日期和月份,在选择年份时,他们选择了无效的年份。然后整个选择器重置为当前日期。这是可以解释的,因为我从当前日期开始设置了 18 年前的最大日期。
我想保留用户选择的日期和月份只重置年份。
我试图用if 的情况在didSelectDate 方法中捕获无效日期,但它一直失败。我的计划是从sender.date 中提取日期和月份(如果它是无效日期),然后创建一个新的日期对象,该日期、月份加上最大日期的年份作为新日期对象并将其设置为当前日期.但是无法确定无效的日期让我很难过。
【问题讨论】:
-
如何不为选择器设置最大/最小日期,但在代码中保留它们“内部”。一旦用户选择了一个日期,如果无效,只更改年份?
-
@Larme 这是一个选项。谢谢。我必须由客户运行它,看看他是否同意。如果没有别的办法,我就走这条路。
标签: ios swift date uidatepicker