【发布时间】:2017-08-24 07:04:48
【问题描述】:
【问题讨论】:
-
把它改成 UIPickerView 怎么样?
-
使用普通 UIPickerView 可以做到
-
如何给这个输入@AhmadF
-
输入应该是当月的天数吧?
标签: ios swift date uidatepicker picker
【问题讨论】:
标签: ios swift date uidatepicker picker
对于这种情况,您应该将其添加为 UIPickerView。假设问题是:如何按当月的天数填充其值?为了更清楚,我会提到它作为步骤:
您应该获得当前月份的开始和结束日期。你可以通过查看this answer找到如何实现它。
您需要获取开始日期和结束日期之间的所有天数 - 使用所需的格式。你可以通过查看this answer找到如何实现它。
获取当月所有天数后,即可轻松填写日期选择器数据源方法。
实施:
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. 申请DateFormatter()必须更改日期。
2. 为您的UIPickerView Datasource 方法将所有日期(字符串格式)保存在您的NSArray 或NSMutableArray 中。
3.然后调用UIPickerViewDatasource和Delegate方法来获取你的结果。
对于日期转换,您可以应用以下代码。
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEE dd MMM"
let currentDate = NSDate()
let convertedDateString = dateFormatter.string(from:currentDate as Date)
print("convertedDate: ", convertedDateString)
【讨论】: