Cocoa 有没有推荐的方法让NSDATECIPKER使用我的步长?
我想知道你们中是否有人能就此提供建议 我正在尝试将NSDatePicker的步长更改为1以外的其他值。 最重要的是,我发现分步走不会改变时间,也不会改变一天 我正在使用委托方法datePickerCell:validateProposedDateValue:timeInterval: 现在,虽然它确实像预期的那样工作,但整个事情看起来太复杂了,我开始怀疑是否有更简单的方法来实现这一点 如有任何文件方面的建议或指示,我们将不胜感激。多谢各位 这是我的密码:Cocoa 有没有推荐的方法让NSDATECIPKER使用我的步长?,cocoa,nsdatepicker,Cocoa,Nsdatepicker,我想知道你们中是否有人能就此提供建议 我正在尝试将NSDatePicker的步长更改为1以外的其他值。 最重要的是,我发现分步走不会改变时间,也不会改变一天 我正在使用委托方法datePickerCell:validateProposedDateValue:timeInterval: 现在,虽然它确实像预期的那样工作,但整个事情看起来太复杂了,我开始怀疑是否有更简单的方法来实现这一点 如有任何文件方面的建议或指示,我们将不胜感激。多谢各位 这是我的密码: - (void)datePickerCe
- (void)datePickerCell:(NSDatePickerCell *)aDatePickerCell validateProposedDateValue:(NSDate **)proposedDateValue
timeInterval:(NSTimeInterval *)proposedTimeInterval {
DLog(@"date picker for: %@", [aDatePickerCell identifier]);
NSDate *newProposedDateValue = nil;
// just in case that we don't need a correction
NSDate *correctedProposedDateValue = *proposedDateValue;
// the interval that the step generates
// > 0 means: the old date is later than the new proposed date
// < 0 means: the old date is earlier than the new proposed date
int interval = [[self dateValue] timeIntervalSinceDate:*proposedDateValue];
// define expected interval values for our scenarios
// we don't care about a minute step that does not cross the hour here
// nor do we care about an hour step that does not cross the day
// minutes are stepped: minute is stepped but hour remains (01:59 <-> 01:00), so the difference is 59 minutes
int const minuteSteppedUpAcrossHour = -59 *60;
int const minuteSteppedDownAcrossHour = - minuteSteppedUpAcrossHour;
// nor do we care about an hour step that does not cross the day
// hours are stepped: hour is stepped but day remains (10.03.13 00:30 <-> 10.03.13 23:30) we have a difference of 23 hours
int const hourSteppedUpAcrossDay = -23 *60 *60;
int const hourSteppedDownAcrossDay = - hourSteppedUpAcrossDay;
// define correction values for our scenarios
int const anHour = 60 *60;
int const aDay = anHour *24;
switch (interval) {
case hourSteppedUpAcrossDay:
correctedProposedDateValue = [*proposedDateValue dateByAddingTimeInterval:(-aDay)];
break;
case minuteSteppedDownAcrossHour:
correctedProposedDateValue = [*proposedDateValue dateByAddingTimeInterval:(+anHour)];
break;
case hourSteppedDownAcrossDay:
correctedProposedDateValue = [*proposedDateValue dateByAddingTimeInterval:(+aDay)];
break;
case minuteSteppedUpAcrossHour:
correctedProposedDateValue = [*proposedDateValue dateByAddingTimeInterval:(-anHour)];
break;
default:
break;
}
if ([self dateValue] < correctedProposedDateValue) {
newProposedDateValue = [self roundDateUpForMinuteIntervalConstraint:correctedProposedDateValue];
} else {
newProposedDateValue = [self roundDateDownForMinuteIntervalConstraint:correctedProposedDateValue];
}
*proposedDateValue = newProposedDateValue;
}
- (NSDate *)roundDateUpForMinuteIntervalConstraint:(NSDate *)date {
return [self date:date roundedUpToMinutes:MINUTE_INTERVAL_CONSTRAINT_FOR_SESSIONS_START];
}
- (NSDate *)roundDateDownForMinuteIntervalConstraint:(NSDate *)date {
return [self date:date roundedDownToMinutes:MINUTE_INTERVAL_CONSTRAINT_FOR_SESSIONS_START];
}
- (NSDate *)date:(NSDate *)date roundedUpToMinutes:(int)minutes {
// Strip miliseconds by converting to int
int referenceTimeInterval = (int)[date timeIntervalSinceReferenceDate];
int remainingSeconds = referenceTimeInterval %(60 *minutes);
int timeRoundedUpToMinutes = 0;
if (remainingSeconds== 0) {
timeRoundedUpToMinutes = referenceTimeInterval;
} else {
timeRoundedUpToMinutes = referenceTimeInterval -remainingSeconds +(60 *minutes);
}
return [NSDate dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)timeRoundedUpToMinutes];
}
- (NSDate *)date:(NSDate *)date roundedDownToMinutes:(int)minutes {
// Strip miliseconds by converting to int
int referenceTimeInterval = (int)[date timeIntervalSinceReferenceDate];
int remainingSeconds = referenceTimeInterval %(60 *minutes);
int timeRoundedUpToMinutes = referenceTimeInterval -remainingSeconds;
return [NSDate dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)timeRoundedUpToMinutes];
}
-(void)datePickerCell:(NSDatePickerCell*)aDatePickerCell validateProposedDateValue:(NSDate**)proposedDateValue
时间间隔:(NSTimeInterval*)建议的时间间隔{
DLog(@“日期选择器:%@,[aDatePickerCell标识符]);
NSDate*新提议的日期值=零;
//以防我们不需要更正
NSDate*已更正的proposedDateValue=*proposedDateValue;
//步骤生成的间隔
//>0表示:旧日期晚于新的拟定日期
//<0表示:旧日期早于新拟定日期
int interval=[[self dateValue]timeIntervalSinceDate:*proposedDateValue];
//为我们的场景定义预期的间隔值
//在这里,我们不在乎一分钟一个小时
//我们也不在乎一小时一步不跨越一天
//分钟是阶梯式的:分钟是阶梯式的,但小时仍然存在(01:59 01:00),因此差为59分钟
int const minutespeedupedaprosshour=-59*60;
int const minutespeeddowncrosshour=-minutespeeddupcrosshour;
//我们也不在乎一小时一步不跨越一天
//时间是阶梯式的:时间是阶梯式的,但白天仍然存在(10.03.13 00:30 10.03.13 23:30)我们有23个小时的差异
int const hourSteppedUpAcrossDay=-23*60*60;
int const hoursteppeddowncrossday=-hoursteppeddowncrossday;
//为我们的场景定义校正值
int const anHour=60*60;
整日常数=小时*24;
开关(间隔){
案例时数阶梯式跨越日期:
修正的proposedDateValue=[*proposedDateValue dateByAddingTimeInterval:(-aDay)];
打破
案例分钟数AppedDownCrossHour:
已更正的proposedDateValue=[*proposedDateValue dateByAddingTimeInterval:(+anHour)];
打破
案例时数阶梯式向下跨越一天:
已更正的proposedDateValue=[*proposedDateValue dateByAddingTimeInterval:(+aDay)];
打破
案例分钟数AppedUpCrossHour:
修正的proposedDateValue=[*proposedDateValue Date通过添加时间间隔:(-anHour)];
打破
违约:
打破
}
if([self dateValue]
也想打个招呼,但编辑不让我打。很抱歉