点击文本框(Label)弹出datePicker_Swift

最近,在项目中实现了一个点击文本框弹出datePicker的效果,废话不多说,先看效果图:

Paste_Image.png
问题:我在开发的过程中,遇到了一个问题,点击文本框会弹出键盘?
解决方法 1:

代码:

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var birthdayTextField: UITextField!
    // 创建一个日期格式器
    let dformatter = NSDateFormatter()
    override func viewDidLoad() {
        super.viewDidLoad()
       birthdayTextField.delegate = self
    }

    func alert() {
        //将日期选择器区域设置为中文,则选择器日期显示为中文
        let birthdayDatePicker = UIDatePicker(frame: CGRectMake(0, 40, 320, 200))
        birthdayDatePicker.locale = NSLocale(localeIdentifier: "zh_CN")
        // 设置样式,当前设为同时显示日期和时间
        birthdayDatePicker.datePickerMode = UIDatePickerMode.Date
        // 响应事件(只要滚轮变化就会触发)
        birthdayDatePicker.addTarget(self, action:nil, forControlEvents: UIControlEvents.ValueChanged)
        
        // 为日期格式器设置格式字符串
        dformatter.dateFormat = "yyyy-MM-dd"
        // 设置初始日期为2000-01-01da
        birthdayDatePicker.date = dformatter.dateFromString("2000-01-01")!
        birthdayDatePicker.maximumDate = NSDate()
        
        //  初始化alertController
        let alertController = UIAlertController(title: "请选择\n\n\n\n\n\n\n\n\n\n\n\n", message: nil, preferredStyle:  .ActionSheet)
        let cancleAction = UIAlertAction(title: "取消", style: .Cancel, handler: nil)
        let doneAction = UIAlertAction(title: "确定", style: .Default) { (action: UIAlertAction) in
            // 使用日期格式器格式化日期、时间
            let date = birthdayDatePicker.date
            let birthdate = self.dformatter.stringFromDate(date)
            self.birthdayTextField.text = birthdate
            self.view.endEditing(true)
        }
        alertController.view.addSubview(birthdayDatePicker)
        alertController.addAction(doneAction)
        alertController.addAction(cancleAction)
        self.presentViewController(alertController, animated: true, completion: nil)  
    }
    
    // 防止点击文本框弹出键盘
    func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        alert()
        return false
    }
}
解决方法 2:通过添加手势,点击Label弹出datePicker的效果

代码:

import UIKit

class ViewController: UIViewController {
   
    @IBOutlet weak var birthdayLabel: UILabel!
    // 创建一个日期格式器
    let dformatter = NSDateFormatter()
    override func viewDidLoad() {
        super.viewDidLoad()     
        // 开启用户交互
        birthdayLabel.userInteractionEnabled = true
        //点击事件
        let tap = UITapGestureRecognizer(target: self, action: #selector(self.alertDatePicker))
        //绑定tap
        birthdayLabel.addGestureRecognizer(tap)
    }

    func alertDatePicker() {
        alert()
    }
    
    func alert() {
        //将日期选择器区域设置为中文,则选择器日期显示为中文
        let birthdayDatePicker = UIDatePicker(frame: CGRectMake(0, 40, 320, 200))
        birthdayDatePicker.locale = NSLocale(localeIdentifier: "zh_CN")
        // 设置样式,当前设为同时显示日期和时间
        birthdayDatePicker.datePickerMode = UIDatePickerMode.Date
        // 响应事件(只要滚轮变化就会触发)
        birthdayDatePicker.addTarget(self, action:nil, forControlEvents: UIControlEvents.ValueChanged)
        
        // 为日期格式器设置格式字符串
        dformatter.dateFormat = "yyyy-MM-dd"
        // 设置初始日期为2000-01-01da
        birthdayDatePicker.date = dformatter.dateFromString("2000-01-01")!
        birthdayDatePicker.maximumDate = NSDate()
        
        //  初始化alertController
        let alertController = UIAlertController(title: "请选择\n\n\n\n\n\n\n\n\n\n\n\n", message: nil, preferredStyle:  .ActionSheet)
        let cancleAction = UIAlertAction(title: "取消", style: .Cancel, handler: nil)
        let doneAction = UIAlertAction(title: "确定", style: .Default) { (action: UIAlertAction) in
            // 使用日期格式器格式化日期、时间
            let date = birthdayDatePicker.date
            let birthdate = self.dformatter.stringFromDate(date)
            self.birthdayLabel.text = birthdate
            self.view.endEditing(true)
        }
        alertController.view.addSubview(birthdayDatePicker)
        alertController.addAction(doneAction)
        alertController.addAction(cancleAction)
        self.presentViewController(alertController, animated: true, completion: nil)
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容