日期选择器中的小时:分钟:秒如何快速

Posted

技术标签:

【中文标题】日期选择器中的小时:分钟:秒如何快速【英文标题】:how have hour:minutes:seconds in Date Picker swift 【发布时间】:2018-05-30 09:05:54 【问题描述】:

我正在编写一个具有计时器的应用程序,用户可以将时间设置为计时器(在选择器视图上),它将倒计时。所以在日期选择器中我选择了倒计时模式。但我不知道如何使用它任何机构都可以帮助我吗?我对swift很陌生。事实上,我希望用户设置日期选择器的时间,然后当点击开始时开始倒计时,但日期选择器只有小时和分钟,没有秒,我该怎么办?我可以将选取器视图的时间设置为标签,但选取器视图没有秒

let timeLeft = datePicker.date
    let formatter = DateFormatter()
    formatter.dateFormat = "HH:mm:ss"
    let formatteddate = formatter.string(from: timeLeft)
    countinLabel.text = formatteddate

【问题讨论】:

datepicker.datePickerMode = .time 检查这个:***.com/questions/40150835/… 【参考方案1】:

您应该尝试使用UIPickerView小时:分钟:秒格式。 因为:UIDatePicker 支持的唯一时间格式是小时:分钟

class ViewController: UIViewController 

    @IBOutlet weak var toolbar: UIToolbar!

    @IBOutlet weak var picker: UIPickerView!

    var hour:Int = 0
    var minutes:Int = 0
    var seconds:Int = 0


数据源和委托如下:

extension ViewController:UIPickerViewDelegate,UIPickerViewDataSource 
    func numberOfComponents(in pickerView: UIPickerView) -> Int 
        return 3
    
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int 
        switch component 
        case 0:
            return 25
        case 1,2:
            return 60

        default:
            return 0
        
    

    func pickerView(_ pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat 
        return pickerView.frame.size.width/3
    

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? 
        switch component 
        case 0:
            return "\(row) Hour"
        case 1:
            return "\(row) Minute"
        case 2:
            return "\(row) Second"
        default:
            return ""
        
    
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) 
        switch component 
        case 0:
            hour = row
        case 1:
            minutes = row
        case 2:
            seconds = row
        default:
            break;
        
    

【讨论】:

当我运行它时,它不起作用,选择器视图没有显示任何内容。有什么问题? @nino 希望你知道如何在 XIB/Nib 中设置参考。您必须将 ViewController 附加到 xib,并且应该有 UIPickerView 参考 ViewController。委托和数据源必须是视图控制器 很抱歉我忘记添加 picker.delegate = self 和 picker.datasource = self 到 viewDidLoad.thanks 非常感谢你的干净代码。 好极了。它在我的情况下帮助了我。谢谢! :)【参考方案2】:

上一个答案的正确代码,适用于 swift 5.1 和 xcode 11.1:

class TimerSelectViewController: UIViewController 

    override func viewDidLoad() 
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        pickerView.delegate = self
    

    @IBOutlet var pickerView: UIPickerView!

    var hour: Int = 0
    var minutes: Int = 0
    var seconds: Int = 0



     extension TimerSelectViewController: UIPickerViewDelegate, UIPickerViewDataSource 

         func numberOfComponents(in pickerView: UIPickerView) -> Int 
             return 3
         

         func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int 
             switch component 
             case 0:
                 return 25
             case 1, 2:
                 return 60
             default:
                 return 0
             
         

         func pickerView(_ pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat 
             return pickerView.frame.size.width/3
         

         func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? 
             switch component 
             case 0:
                 return "\(row) Hour"
             case 1:
                 return "\(row) Minute"
             case 2:
                 return "\(row) Second"
             default:
                 return ""
             
         
         func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) 
             switch component 
             case 0:
                 hour = row
             case 1:
                 minutes = row
             case 2:
                 seconds = row
             default:
                 break;
             
         
     

【讨论】:

为什么是 25 小时,而不仅仅是 24 小时(从 0 到 23)。 OK 分钟和秒(0 到 59)

以上是关于日期选择器中的小时:分钟:秒如何快速的主要内容,如果未能解决你的问题,请参考以下文章

如何检查日期范围选择器中的日期是不是更改?

如何在 ACF 日期选择器中限制 Wordpress 中的开始日期和结束日期的两个日期?

更改日期选择器后如何立即清除时间选择器中的内容?

我如何将当前日期与日期选择器中的用户输入日期进行比较

daterangepicker插件单个时间选择器怎么加小时、分钟、秒,如图的效果

如何将 Angular 日期范围选择器中的日期设置为该月的第一天