需求如下:
- 有开始时间、结束时间、提醒时间三个cell需要弹出时间选择器
- 开始时间和结束时间只显示日期,提醒时间显示日期和时间(小时和分钟)
- 选择好时间好,开始时间和结束时间所在的cell显示文案只有年月日,提示时间所在cell显示的文案有年月日小时分钟
- 编辑提醒时间时(之前已经设置过提醒时间了,现在想改这个提醒时间),打开DatePicker的时候,DatePicker的当前日期需要是之前设定的日期,不能是现在的日期
实现方法如下:
func updateDateLabel(indexPath:NSIndexPath) {
let formatter = NSDateFormatter()
formatter.dateStyle = .MediumStyle
switch indexPath.row {
case 6 :
formatter.timeStyle = .ShortStyle
dueDateLabel.text = formatter.stringFromDate(dueDate)
case 2:
startDateLabel.text = formatter.stringFromDate(startDate)
case 3:
endDateLabel.text = formatter.stringFromDate(endDate)
default:
print("erro.....")
}
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
switch indexPath.row {
case 2:
showDatePicker(indexPath)
case 3:
showDatePicker(indexPath)
case 6:
showDatePicker(indexPath)
default:
print("点击了其他行")
}
}
func showDatePicker(indexPath: NSIndexPath) {
let alert = UIAlertController(title: "", message: "\n\n\n\n\n\n\n\n\n\n\n\n\n", preferredStyle: .ActionSheet)
let cancel = UIAlertAction(title: "取消", style: .Cancel , handler: nil)
let datePicker = UIDatePicker()
switch indexPath.row {
case 2:
datePicker.datePickerMode = .Date
datePicker.setDate(startDate, animated: false)
case 3:
datePicker.datePickerMode = .Date
datePicker.setDate(endDate, animated: false)
case 6:
datePicker.datePickerMode = .DateAndTime
datePicker.setDate(dueDate, animated: false)
default:
print("点击了其他行")
}
alert.view.addSubview(datePicker)
let confirmOk = UIAlertAction(title: "确定", style: .Destructive) { (UIAlertAction) in
switch indexPath.row {
case 6: self.dueDate = datePicker.date
case 2: self.startDate = datePicker.date
case 3: self.endDate = datePicker.date
default: print("erro")
}
self.updateDateLabel(indexPath)
}
alert.addAction(cancel)
alert.addAction(confirmOk)
presentViewController(alert, animated: true, completion: nil)
}