2017-10-09 91 views
0

我在一年中的所有月份製作一個pickerView,我想創建一個數組,當前月份在pickerView的開頭,接下來的一個月等等。我已經在所有的月份中填充了pickerView和數組,並且我也獲得了當前日期。如何製作當前月份和接下來幾個月的數組。

let Months = ["January","Febrary","March","April","May","June","July","August","September","October","November","December"] 

@IBOutlet var DateLabel: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    DateTime() 
} 

func DateTime() { 

    let time = DateFormatter() 
    let date = DateFormatter() 

    time.timeStyle = .medium 
    date.dateStyle = .full 

    print(time.string(from: Date())) 
    print(date.string(from: Date())) 

    //RiderTimeStampRequested = time.string(from: Date()) 
    DateLabel.text = date.string(from: Date()) 
} 

func numberOfComponents(in pickerView: UIPickerView) -> Int { 
    return 1 
} 

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    return Months.count 
} 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    return Months[row] 
} 

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    print(Months[row]) 
} 
+1

僅供參考 - 不要硬編碼自己的月份名稱數組。從'DateFormatter monthSymbols'(或其變體之一)獲取它們。 – rmaddy

回答

1

如果我理解正確,您希望獲得當前月份之後所有月份的數組,包括當前月份。如果是月目前,您的數組將包含:

["July", "August", "September", "October", "November", "December"] 

要做到這一點,我們可以使用dropFirst方法來刪除一個數組的第一個X元素。

可以聲明一個新的屬性是這樣的:

var monthsInPickerView: [String]! 

然後初始化它viewDidLoad

let calendar = Calendar.current 
let month = calendar.dateComponents([.month], from: Date()).month! 
monthsInPickerView = Array(Months.dropFirst(month - 1)) 

然後你會用monthsInPickerView作爲選擇器視圖的數據源。

+0

我嘗試實現你在這裏的東西,並給我這個錯誤「無法指定'ArraySlice '類型的值來鍵入'[String]!' 「在此行中monthsInPickerView = Months.dropFirst(month - 1)謝謝 – Roger

+0

@Roger請參閱編輯。 – Sweeper

+0

它的工作原理!非常感謝你,最後一件事,我如何不斷重複這幾個月? 12月份回到1月份之後,等待幾個月。 – Roger

相關問題