当前位置: > > > Swift - 日期选择控件(UIDatePicker)的用法

Swift - 日期选择控件(UIDatePicker)的用法

(本文代码已升级至Swift3)

1,使用storyboard创建日期选择控件
首先我们将一个 UIDatePicker 控件和一个按钮直接添加到 Main.Storyboard 上。该按钮是为了点击时弹出提示框显示当前选择的日期和时间。
同时在 ViewController.swift 中使用 IBOutlet 建立起控件和事件的关联,具体代码如下:
import UIKit

class ViewController: UIViewController {
    
    @IBOutlet  var dpicker:UIDatePicker!
    @IBOutlet  var btnshow:UIButton!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    @IBAction func showClicked(_ sender:UIButton)
    {
        let date = dpicker.date
        
        // 创建一个日期格式器
        let dformatter = DateFormatter()
        // 为日期格式器设置格式字符串
        dformatter.dateFormat = "yyyy年MM月dd日 HH:mm:ss"
        // 使用日期格式器格式化日期、时间
        let datestr = dformatter.string(from: date)
        
        let message =  "您选择的日期和时间是:\(datestr)"
        
        // 创建一个UIAlertController对象(消息框),并通过该消息框显示用户选择的日期、时间
        let alertController = UIAlertController(title: "当前日期和时间",
                                                message: message,
                                                preferredStyle: .alert)
        let cancelAction = UIAlertAction(title: "确定", style: .cancel, handler: nil)
        alertController.addAction(cancelAction)
        self.present(alertController, animated: true, completion: nil)
    }
}


2,纯代码创建日期选择控件
import UIKit

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //创建日期选择器
        let datePicker = UIDatePicker(frame: CGRect(x:0, y:0, width:320, height:216))
        //将日期选择器区域设置为中文,则选择器日期显示为中文
        datePicker.locale = Locale(identifier: "zh_CN")
        //注意:action里面的方法名后面需要加个冒号“:”
        datePicker.addTarget(self, action: #selector(dateChanged),
                             for: .valueChanged)
        self.view.addSubview(datePicker)
    }
    
    //日期选择器响应方法
    func dateChanged(datePicker : UIDatePicker){
        //更新提醒时间文本框
        let formatter = DateFormatter()
        //日期样式
        formatter.dateFormat = "yyyy年MM月dd日 HH:mm:ss"
        print(formatter.string(from: datePicker.date))
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

3,日期选择控件文字改成中文
默认日期选择控件中的文字是英文,如果想显示中文,则需要将日期选择控件的区域做如下设置
//将日期选择器区域设置为中文,则选择器日期显示为中文
datePicker.locale = Locale(identifier: "zh_CN")
  

4,改变控件时间选择模式
默认情况下日期选择控件里面选项既有日期,又有时间。我们可以修改选择模式,让它只有其中一种。
(1)只有日期选择
datePicker.datePickerMode = .date

(2)只有时间选择
datePicker.datePickerMode = .time

5,修改文字颜色
UIDatePicker 默认的文字颜色是黑色,但如果我们使用的是深色背景的话(比如)会难以辨认。我们可以通过 setValue 来修改文字颜色。
比如我们将文字改成白色:
datePicker.setValue(UIColor.white, forKey: "textColor")
评论7
  • 7楼
    2017-11-22 17:30
    尾巴

    航哥,请问如何设置只选择年份或者只选择月份?

    站长回复

    UIDatePicker没办法只显示年份或月份,不过你可以使用UIPickerView来实现这个功能。具体可以参考我的这两篇文章:
    Swift - 选择框(UIPickerView)的用法
    Swift - UIPickerView无限循环滚动的实现(数据循环显示)

  • 6楼
    2017-10-25 18:06
    泡泡

    航哥,如果需要选择农历怎么办呢?

    站长回复

    UIDatePicker不提供农历选择的功能,需要的话只能去找找一些第三方的日期选择控件。

  • 5楼
    2017-07-10 11:10
    archibald385

    航哥,请问如何实现 点击textfield用uialertview弹出 UIDatePicker用来选择日期, 我调用 alertview的view.add方法虽然可以把日期控件添加进去,但是日期控件已经把确定以及取消按钮全部遮住了,无法点击确定,取消按钮

    站长回复

    最近比较忙,很多留言都没办法一一回复。UIAlertController是没办法根据内部添加的视图来自适应高度的。为了避免遮住按钮,你可以将UIAlertController标题设置成多个换行符,把内容区域撑大。 

  • 4楼
    2017-06-27 09:11
    溜溜

    航哥666666正好需要~~~顶一下

    站长回复

    谢谢你的支持:)

  • 3楼
    2016-12-18 19:46
    Nathan

    如果背景是深色的话(比如黑色),好像不能设置datepicker的字体颜色

    站长回复

    可以设置的,我在文章末尾补充了相关内容,你可以看下。

  • 2楼
    2016-06-27 10:11
    小白

    航哥,这个控件没有默认为中文啊,而且这个格式的方式为什么跟显示的不一样啊?

    站长回复

    你代码里设置个选择器的区域就变成中文了(文章第三点)

  • 1楼
    2016-03-24 14:33
    temp

    记得改UIAlertController

    站长回复

    多谢提醒,已修正。