UIDatePicker - 工作日但没有时间

时间:2016-08-17 18:18:53

标签: ios uidatepicker

UIDatePicker中,有日期模式和日期和时间模式。问题是我想要介于两者之间。基本上我需要日期模式,但也显示工作日。或者换句话说,日期和时间模式,但没有时间选项。这是可能的还是我必须使用普通UIPickerView并从头开始编程选项?

我看到一个类似的问题,有人只想显示工作日而不是日期,但我想要日期,而不是时间。

2 个答案:

答案 0 :(得分:0)

您需要创建自己的。您可以按照下面帖子中列出的步骤进行操作,但您还需要事先确定日期。使用NSDateFormatter很容易实现。

UIdatepicker showing weekdays

答案 1 :(得分:0)

这是我做的一个例子。您可以添加它并使其具有您想要的功能。

enter image description here

//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