2014-07-09 251 views
2

我很努力地设置datepicker只允许在Swift中使用时间和24小时格式,任何想法如何做到这一点?在Swift中使用24小时DatePicker

感谢

+0

你会如何在Objective-C中做到这一点?你在Swift中尝试过什么? – Grimxn

+0

我一直在使用这篇文章中显示的方法http://stackoverflow.com/questions/2140388/how-to-disable-am-pm-in-uidatepicker不知道如何携带,以迅速 – Prateek

回答

7

的OP说,他正在试图重新在斯威夫特this answer。这个问题的答案是杂牌组装电脑(这取决于使用24小时格式,而不是真正解决问题丹麦环境),但在这里,你会怎么做,在斯威夫特

var datePicker = UIDatePicker() // Although you probably have an IBOutlet 
datePicker.datePickerMode = UIDatePickerMode.Time 
datePicker.locale = NSLocale(localeIdentifier: "da_DK") 

但这是一个杂牌 - 推出自己的UIPicker

UPDATE 的OP说,滚你自己是“麻烦” - 这其实真的很简单 - 这里有一个简单的方法来做到这一点(虽然一个更好的办法是继承UIPickerView)...

import UIKit 

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { 

    @IBOutlet weak var myDatePicker: UIPickerView! 
    private var calendar = Calendar.autoupdatingCurrent 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.time = Date() // updates the picker to "now" 
    } 

    // MARK: UIPickerViewDataSource 
    func numberOfComponents(in: UIPickerView) -> Int { return 2 } 
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
     if component == 0 { // Hours 
      return 24 
     } 
     return 12 // five minute intervals 
    } 

    // MARK: UIPickerViewDelegate 
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
     if component == 0 { // Hours 
      return String(format: "%02d", row) 
     } 
     return String(format: "%02d", row * 5) 
    } 
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
     print("picker changed, selected \(self.time)") 
    } 

    // MARK: Getting & setting the time 
    var time: Date { 
     get { 
      let unitFlags: Calendar.Unit = [.year, .day, .hour, .minute, .second] 
      var components = self.calendar.components(unitFlags, from: Date()) 
      components.hour = self.myDatePicker.selectedRow(inComponent: 0) 
      components.minute = self.myDatePicker.selectedRow(inComponent: 1) * 5 
      components.second = 0 
      if let date = self.calendar.date(from: components) { 
       return date 
      } 
      return Date() // shouldn't get here 
     } 
     set { 
      var components = self.calendar.components([.hour, .minute], from: newValue) 
      if let hour = components.hour, let minute = components.minute { 
       self.myDatePicker.selectRow(hour, inComponent: 0, animated: true) 
       self.myDatePicker.selectRow(minute/5, inComponent: 1, animated: true) 
      } 
     } 
    } 
} 
+0

所以我会怎么去关于解决问题并实现24小时制?顺便提一下,谢谢你的回答 – Prateek

+0

正如其他问题的答案之一所言,通过滚动你自己的'UIPicker'。 – Grimxn

+0

嗯,我看到了,但是这种解决方法并不适用于所有时区? 24小时的格式不会一样吗? – Prateek