How to customise UIDatePicker to achieve the following output?
这是一个包含日期,日期和月份作为输入的选择器,并且还可以一屏显示,是否可以通过iOS中的选择器/日期选择器实现这种功能?
在这种情况下,应将其添加为UIPickerView。假设问题将是:如何在当月的日期之前填充其值?为了更清楚一点,我将其作为步骤提及:
-
您应该获得当前月份的开始和结束日期。您可以通过检查此答案找到实现方法。
-
您需要在开始日期和结束日期之间使用所需的格式获取整天的时间。您可以通过检查此答案找到实现方法。
-
获得当月的所有天数后,您可以轻松地填充日期选择器数据源方法。
实施:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { var currentMonthDays: [String] { var array = [String]() var date = Date().startOfMonth() // first date let endDate = Date().endOfMonth() let fmt = DateFormatter() //fmt.dateFormat ="dd/MM/yyyy" fmt.dateFormat ="EEE dd MMM" while date <= endDate { date = Calendar.current.date(byAdding: .day, value: 1, to: date)! array.append(fmt.string(from: date)) } return array } override func viewDidLoad() { super.viewDidLoad() print(currentMonthDays) } // Picker View Data Soruce & delegate Methods // REMARK: make sure to connect pickerview datasource/delegate to your view controller, // I did it from the storyboard func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 } func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { return currentMonthDays.count } func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { return currentMonthDays[row] } } // Step #1: extension Date { func startOfMonth() -> Date { return Calendar.current.date(from: Calendar.current.dateComponents([.year, .month], from: Calendar.current.startOfDay(for: self)))! } func endOfMonth() -> Date { return Calendar.current.date(byAdding: DateComponents(month: 1, day: -1), to: self.startOfMonth())! } } |
请执行以下步骤:-
1.您必须使用
2.将所有日期(字符串格式)保存在
3.然后调用
对于日期转换,您可以应用以下代码。
1 2 3 4 5 6 | let dateFormatter = DateFormatter() dateFormatter.dateFormat ="EEE dd MMM" let currentDate = NSDate() let convertedDateString = dateFormatter.string(from:currentDate as Date) print("convertedDate:", convertedDateString) |