2012-04-08 40 views
0

這裏是我的代碼:一個的UIDatePicker錯誤

picker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0,40,0,0)]; 
picker.datePickerMode = UIDatePickerModeDateAndTime; 
picker.minuteInterval = 5; 
picker.minimumDate = [NSDate date]; 

好,它的工作很好,直到在這裏。 (圖片:http://img29.imageshack.us/img29/8277/snap1r.png

在DatePicker中過去的日子全部變灰。它不能被選中。 和分鐘間隔爲5.

但是現在當我單擊任何已經變灰的行時。 DatePicker的日期返回此刻的時間。

例如:我cliked 「9」 上的DatePicker(這是已經過去的時間) 而現在的系統時間是

22:27:57 

和DatePicker的日期返回:(圖片:http://img42.imageshack.us/img42/2760/nslog.png

2012-04-08 22:27 

因爲我的分鐘間隔是5分鐘,所以我不希望選取器返回的值不能被5除,這會導致我的程序崩潰。

這是一個錯誤?或者這只是我的問題? 謝謝!

------要檢查克(對不起我的英語不是很好)

因爲日期選擇器的minuteInterval是5。所以DatePicker的日期的返回值只返回可由5分鐘divded (等0,5,10,15 .....)

並且我還將屬性minimumDate設置爲[NSDate日期],以便用戶不能選擇過去的日期。

但現在用戶單擊過去的行(變灰),DatePicker的日期將返回當時的時間。

所以日期分鐘可以是任何值(0〜60),但我不希望(0,5,10,15 ....)

我已經盡我所能來解釋>」 <請原諒。


要督察克

感謝您的代碼,我突然意識到有解決我的問題的好方法。 但我不知道爲什麼,我用你的代碼存在一些問題(我想這是關於時區)

但我按照你的邏輯,並重新編寫代碼,我會與大家分享:

unsigned unitFlags_ = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit; 
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *comps_ = [gregorian components:unitFlags_ fromDate:[jRemindPicker date]]; 
NSInteger remainder = [comps_ minute] % 5; 

NSLog(@"%i-%i-%i %i:%i", comps_.year, comps_.month, comps_.day, comps_.hour, comps_.minute); 

if (remainder) { 
    /* My Own code /* 
} else { 
    /* My Own Code /* 
} 
[gregorian release]; 

回答

3

你的問題與選擇日期描述/時間是有點不清楚,因此,或許你能澄清?提供一個簡短的屏幕錄像?

在任何情況下,它聽起來就像你不能選擇今天之前的日期,所以你的錯誤是在這一行:

picker.minimumDate = [NSDate date]; 

你是最小的可選擇日期設置爲當前日期和時間(因爲這是[NSDate date]返回。

刪除該行,你應該能夠選擇你想要的任何日期/時間。

編輯
如果問題是你不能選擇在將來的日期,嘗試設置:

picker.maximumDate = [NSDate distantFuture]; 

使用您現有的最低和這個新的最大值,可選日期的範圍將被設置爲今天之後的很長一段時間內的一個非常之間的某處。

SECOND EDIT
謝謝澄清!我現在看到了這個問題。當您收到用戶更改日期的回叫時,您必須適當地進行四捨五入。然後,您可以使用圓潤的時間在這一點上,也可以手動通過setDate: animated:

例如撿拾日期/時間設置爲四捨五入值:

-(IBAction) pickerValueChanged:(id)selector_ 
{ 
    UIDatePicker* picker = (UIDatePicker*) selector_; 

    // get the minutes from the picker 
    NSCalendar* calendar = [NSCalendar currentCalendar]; 
    NSDateComponents* components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:picker.date]; 
    NSInteger minutes = [components minute]; 

    // check if the minutes should be rounded 
    NSInteger remainder = minutes % 5; 
    if(remainder) 
    { 
     minutes += 5 - remainder; 
     [components setMinute:minutes]; 
     picker.date = [calendar dateFromComponents:components]; 
    } 

    // now picker.date is "safe" to use! 
} 
+0

抱歉,因爲我的英文不是很好。 我的問題是我不能選擇一個日期在今天之前.. 請等待我,我會編輯主帖 – Johnny 2012-04-08 16:25:29

+0

對不起。請參閱我的編輯,如果問題是您將來無法選擇日期。 – 2012-04-08 16:31:47

+0

我已在主帖中編輯過,請檢查:) – Johnny 2012-04-08 16:41:54