日期选择器中的小时:分钟:秒如何快速
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 中的开始日期和结束日期的两个日期?