在UIDatePicker
中,有日期模式和日期和时间模式。问题是我想要介于两者之间。基本上我需要日期模式,但也显示工作日。或者换句话说,日期和时间模式,但没有时间选项。这是可能的还是我必须使用普通UIPickerView
并从头开始编程选项?
我看到一个类似的问题,有人只想显示工作日而不是日期,但我想要日期,而不是时间。
答案 0 :(得分:0)
您需要创建自己的。您可以按照下面帖子中列出的步骤进行操作,但您还需要事先确定日期。使用NSDateFormatter很容易实现。
答案 1 :(得分:0)
这是我做的一个例子。您可以添加它并使其具有您想要的功能。
//example of use
//inside the class
var datePicker: DatePicker!
//inside viewDidLoad
datePicker = DatePicker(date: dateToInitializeDatePickerTo)
extension ViewController: UIPickerViewDelegate {
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 2
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
switch(component) {
case 0:
return 12
case 1:
return datePicker.numberOfYears
default:
return 0
}
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
switch(component) {
case 0:
return datePicker.longerMonths[row]
case 1:
return "\(datePicker.years[row])"
default:
return ""
}
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
switch(component) {
case 0:
datePicker.selectedMonth = row
case 1:
datePicker.yearsAgo = row
default:
break
}
yourVariableForTheDate = datePicker.selectedAge
}
}
//DatePickerClass.swift
import Foundation
class DatePicker {
let YEARS_FROM_NOW_TILL_THIS_YEAR = 2000
var type: Int!
var selectedAge: NSDate {
let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm"
let stringDate = "\(year)-\(stringMonth)-01 01:01"
let date = formatter.dateFromString(stringDate)!
return date
}
let now = NSDate()
var years: [Int]!
var yearsAgo: Int!
var theMonth: Int!
var selectedMonth: Int {
get {
return theMonth
}
set {
if newValue == -1 {
theMonth = 11
} else {
theMonth = newValue
}
}
}
private var selectedYear: Int {
return years[yearsAgo]
}
let calendar = NSCalendar.currentCalendar()
let longerMonths = ["January", "Febuary", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
let shorterMonths = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
var numberOfYears: Int {
return years.count
}
var monthYear: String {
return "\(shorterMonth) \(year)"
}
var year: Int {
return years[yearsAgo]
}
var longerMonth: String {
return longerMonths[selectedMonth]
}
var shorterMonth: String {
return shorterMonths[selectedMonth]
}
var stringMonth: String {
var month: String = ""
if selectedMonth < 9 {
month.appendContentsOf("0")
}
month.appendContentsOf("\(selectedMonth + 1)")
return month
}
init(date: NSDate?) {
years = generatePickerData()
if date != nil {
setAge(date!)
} else {
setAge(now)
}
}
func setAge(date: NSDate) {
selectedMonth = calendar.component(.Month, fromDate: date) - 1
yearsAgo = (calendar.component(.Year, fromDate: now) - calendar.component(.Year, fromDate: date))
}
private func generatePickerData() -> [Int] {
var yearInts : [Int] = []
var year = calendar.component(.Year, fromDate: now)
while year >= YEARS_FROM_NOW_TILL_THIS_YEAR {
yearInts.append(year)
year -= 1
}
return yearInts
}
}
[1]: http://i.stack.imgur.com/XJ7Gg.png