2014-07-09 261 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