2012-04-08 28 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