簡體   English   中英

iOS Swift日期選擇器選擇下一個間隔

[英]iOS Swift Date Picker select next interval

我想知道是否有一種方法可以選擇時間選擇器的日期到下一個間隔而不是最接近的時間:如果是1:47,我希望選擇器顯示2:00而不是1:45 ..是否有任何屬性為UIDatePicker選擇下一個時間間隔?

let datePicker = UIDatePicker()
datePicker.datePickerMode = UIDatePickerMode.time
datePicker.minuteInterval = 15

感謝您的任何幫助。

您需要為UIControlEvents .valueChanged日期選擇器添加一個目標,並從所選日期獲取分鍾組件。 要計算下一個小時的四分之一分鍾,可以使用以下公式(x - x % 15 + 15) % 60

import UIKit
class ViewController: UIViewController {
    @IBOutlet weak var datePicker: UIDatePicker!
    override func viewDidLoad() {
        super.viewDidLoad()
        datePicker.addTarget(self, action: #selector(datePickerValueChanged), for: .valueChanged)
    }
    @objc func datePickerValueChanged(datePicker: UIDatePicker) {
        if datePicker.date.minute % 15 != 0 {
            if datePicker.date.minute > 45 {
                datePicker.date += 60*60
            }
            datePicker.date = datePicker.date.nextHourQuarter
        } 
    }
}

extension Int {
    var nextHourQuarter: Int {
        return (self - self % 15 + 15) % 60
    }
}

extension Date {
    var hour: Int { return Calendar.current.component(.hour, from: self) }
    var minute: Int { return Calendar.current.component(.minute, from: self) }
    var nextHourQuarter: Date {
        return  Calendar.current.date(bySettingHour: hour, minute: minute.nextHourQuarter, second: 0, of: self)!
    }
}

樣品

UIDatePicker類不具有此功能。 您只能鎖定選擇器以允許某些值(例如,如果將datePicker.minuteInterval設置為15,則可用的選擇將從初始時間開始,並在15分鍾的滴答聲中進行)。

您可以通過監聽值更改通知並手動設置時間(最好使用動畫)來自己實現此行為。

我想我的意思還不清楚。 我已經編寫了將此函數設置為下一個時間間隔的選擇器時間。 我不知道它是否正確,但是可以正常工作:

  • 日期8:03->選擇日期為8:15
  • 日期8:23->選擇日期為8:30
  • 日期8:38->選擇日期為8:45
  • 日期8:46->選擇日期為9:00

viewDidLoad:

let datePicker = UIDatePicker()
datePicker.datePickerMode = UIDatePickerMode.time
datePicker.minuteInterval = 15
datePicker.date = setDatePickerTime(datePicker: datePicker)

將DatePicker時間設置為下一個15分鍾間隔

func setDatePickerTime(datePicker: UIDatePicker) -> Date {
  let calendar = Calendar.current
  let currentHour = calendar.component(.hour, from: Date())
  let currentMinute = calendar.component(.minute, from: Date())

  let dateFormatter = DateFormatter()
  dateFormatter.dateFormat =  "HH:mm"

  var pickerOutHour = ""
  var pickerOutMinute = ""

  if (currentMinute > 45 && currentMinute < 60){
      pickerOutMinute = "00"
      pickerOutHour = String((Int(currentHour) + 1) % 24)
  } else if (currentMinute > -1 && currentMinute < 16){
      pickerOutMinute = "15"
      pickerOutHour = String(currentHour)
  } else if (currentMinute > 15 && currentMinute < 31){
      pickerOutMinute = "30"
      pickerOutHour = String(currentHour)
  } else if (currentMinute > 30 && currentMinute < 46){
      pickerOutMinute = "45"
      pickerOutHour = String(currentHour)
  }

  let pickerOutDate = dateFormatter.date(from: pickerOutHour + ":" + pickerOutMinute)
  return pickerOutDate!
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM