底部弹出时间选择器 Date Picker

需求如下:

  • 有开始时间、结束时间、提醒时间三个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)
        
    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容