Cocoa 有没有推荐的方法让NSDATECIPKER使用我的步长?

Cocoa 有没有推荐的方法让NSDATECIPKER使用我的步长?,cocoa,nsdatepicker,Cocoa,Nsdatepicker,我想知道你们中是否有人能就此提供建议 我正在尝试将NSDatePicker的步长更改为1以外的其他值。 最重要的是,我发现分步走不会改变时间,也不会改变一天 我正在使用委托方法datePickerCell:validateProposedDateValue:timeInterval: 现在,虽然它确实像预期的那样工作,但整个事情看起来太复杂了,我开始怀疑是否有更简单的方法来实现这一点 如有任何文件方面的建议或指示,我们将不胜感激。多谢各位 这是我的密码: - (void)datePickerCe

我想知道你们中是否有人能就此提供建议

我正在尝试将NSDatePicker的步长更改为1以外的其他值。 最重要的是,我发现分步走不会改变时间,也不会改变一天

我正在使用委托方法datePickerCell:validateProposedDateValue:timeInterval:

现在,虽然它确实像预期的那样工作,但整个事情看起来太复杂了,我开始怀疑是否有更简单的方法来实现这一点

如有任何文件方面的建议或指示,我们将不胜感激。多谢各位

这是我的密码:

- (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]
也想打个招呼,但编辑不让我打。很抱歉