2015-09-02 88 views
1

Goord早上都在一起,斯威夫特日期選擇器與最小日期

我有IOS 8,快捷的應用程序。 這裏有一個UIViewcontrollerUIDatepicker

我設置了一個最短日期。例如今天的日期:2 |五月| 2015 使用此解決方案時,應該無法設置過去的日期

但是如果想設置此日期15 |一月| 2016 我定在第一天至15 比上月到一月,但隨後UIDatepicker追溯到最小日期2015年

5月2日這是可能的,這德恩更改日至15月到一月,那年自動轉換到2016年?

+0

set picker.minimumdate = [nsdate date]; –

+0

這不是我的問題的解決方案...設置最小日期。問題是,如果我想設定一個未來的日期,那麼我必須在年初選擇,而且我可以改變日期和月份。 – Ghost108

+0

我不相信你用標準的'UIDatePicker'控件可以找到你想要的。你將不得不從頭開始實施。 –

回答

3

讓你minimumDate取消設置並嘗試通過代碼來配置它...

試試這個:

@IBAction func changeValue(sender: UIDatePicker) 
{ 

    //Get time Now, and convert to a NSCalendar 
    //Specify the minimun date if you want. 
    let now = NSDate() 
    let nowCalendar = NSCalendar.currentCalendar() 
    let nowComponents = nowCalendar.components([.Day, .Month, .Year], fromDate: now) 

    //Compare if date is lesser than now and then create a new date 
    if nowCalendar.compareDate(sender.date, toDate: now, toUnitGranularity: [.Day, .Month, .Year]) == NSComparisonResult.OrderedAscending 
    { 

     let dateCalendar = NSCalendar.currentCalendar() 
     let dateComponents = dateCalendar.components([.Day, .Month, .Year], fromDate: sender.date) 

     dateComponents.year = nowComponents.year + 1 
     let newDate = dateCalendar.dateFromComponents(dateComponents) 
     sender.date = newDate! 
    } 

} 
+0

您可以在http://nshipster.com/nscalendar-additions/和http://rypress.com/tutorials/objective-c/data-types/dates上獲取更多信息 –

+0

現在可以在Xcode 9和Swift上工作嗎? 3,@dede.exe? – Shyam

+0

@Shyam您需要做一些更改才能在swift3中完成此工作 –

0
///Swift4 Version - I think it may works with 3 too. 
@IBAction func changeValue(sender: UIDatePicker) 
{ 

    //Get time Now, and convert to a NSCalendar 
    //Specify the minimun date if you want. 
    let now = Date() 
    let nowCalendar = Calendar.current 
    let nowComponents = nowCalendar.dateComponents([.day, .month, .year], from: now) 

    //Compare if date is lesser than now and then create a new date 
    if nowCalendar.compare(sender.date, to: now, toGranularity: Calendar.Component.day) == ComparisonResult.orderedAscending 
    { 
     var dateCalendar = Calendar.current 
     var dateComponents = dateCalendar.dateComponents([.day, .month, .year], from: sender.date) 

     guard let year = nowComponents.year else { return } 

     dateComponents.year = year + 1 
     let newDate = dateCalendar.date(from:dateComponents) 
     sender.date = newDate! 
    } 
} 

我出版了一本完整的例子在操場上工作,如果你想打個小。 https://gist.github.com/dedeexe/4878f78d7e1d5fe8b372ef84de629b59

+0

我希望這個例子能幫助你@Shyam –

相關問題