1

我有一个 UIDatepicker 让用户选择 time 。当用户选择一个时间并按下后退按钮以关闭视图并且如果他想检查他在 中选择的时间时,会出现在单击 aUITableview的位置。不显示用户选择的时间,它显示当前时间或 datepicker 的时间开始时间。我想显示用户再次打开日期选择器时用户选择的时间。 这是我在用户按下显示视图时的代码UIViewUIButtonUIDdatePickerUIDdatePickerUIDdatePickerUIDdatePickerUIButtonUIDdatePicker

-(IBAction)settingsButtonChanged:(UIButton *)sender
{

    userTimePicker = [[UIDatePicker alloc]init];
    [userTimePicker addTarget: self
                       action: @selector(userTimePickerValueChanged:)forControlEvents: UIControlEventValueChanged];
}

这是我的代码,它让 datepicker 有自定义时间限制

-(IBAction)datepickerTimenButtonChanged:(UIButton *)control
{

    if (control.tag == 1)
    {
        self.selectedButton = control.tag;

        int startTime = 7;
        int endTime = 11;

        NSDate *date1 = [NSDate date];
        components = [gregorian components: NSUIntegerMax fromDate: date1];

        [components setHour:startTime];;
        [components setMinute:00];

        NSDate *startDate = [gregorian dateFromComponents:components];

        [components setHour:endTime];
        [components setMinute:00];

        NSDate *endDate = [gregorian dateFromComponents:components];

        morningButton.selected = YES;
        afternoonButton.selected = NO;
        eveningButton.selected = NO;
        nightButton.selected = NO;

        [userTimePicker setDatePickerMode:UIDatePickerModeTime];

        [userTimePicker setMinimumDate:startDate];
        [userTimePicker setMaximumDate:endDate];

        [userTimePicker setDate:startDate animated:YES];
        [userTimePicker reloadInputViews];

    }

    if (control.tag == 2)
    {
        self.selectedButton = control.tag;

        morningButton.selected = NO;
        afternoonButton.selected = YES;
        eveningButton.selected = NO;
        nightButton.selected = NO;

        int startTime = 12;
        int endTime = 15;

        NSDate *date1 = [NSDate date];
        components = [gregorian components: NSUIntegerMax fromDate: date1];

        [components setHour:startTime];
        [components setMinute:00];

        NSDate *startDate = [gregorian dateFromComponents:components];

        [components setHour:endTime];
        [components setMinute:00];

        NSDate *endDate = [gregorian dateFromComponents:components];

        [userTimePicker setDatePickerMode:UIDatePickerModeTime];

        [userTimePicker setMinimumDate:startDate];
        [userTimePicker setMaximumDate:endDate];

        [userTimePicker setDate:startDate animated:YES];
        [userTimePicker reloadInputViews];

    }
}

允许用户选择自己的时间的代码

-(void) userTimePickerValueChanged:(UIButton *)sender
{

    switch (self.selectedButton)
    {
        case 1:
        {
            NSUserDefaults *userSelectedMorningTime = [NSUserDefaults standardUserDefaults];

            NSDate *selectedMorningTime = [userTimePicker date];

            NSLog (@"SETTING: morningTimeKey");

            storedMornTime = selectedMorningTime;

            [userSelectedMorningTime setObject:selectedMorningTime forKey:@"morningTimeKey"];
            [userSelectedMorningTime synchronize];
        }
            break;

        case 2:
        {
            NSUserDefaults *userSelectedAfternoonTime = [NSUserDefaults standardUserDefaults];

            NSDate *selectedAfternoonTime = [userTimePicker date];

            NSLog (@"SETTING: afternoonTimeKey");

            storedAfternoonTime = selectedAfternoonTime;

            [userSelectedAfternoonTime setObject:selectedAfternoonTime forKey:@"afternoonTimeKey"];
            [userSelectedAfternoonTime synchronize];
        }
            break;
}
4

4 回答 4

2

根据我从代码中可以看出,您正在将选定的时间保存到NSUserDefaults,但您永远不会使用保存的时间。

我猜如果你改变一切都应该工作。

-(IBAction)datepickerTimenButtonChanged:(UIButton *)control
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    if (control.tag == 1)
    {
        self.selectedButton = control.tag;

        int startTime = 7;
        int endTime = 11;

        //Saved Morning time date from user defaults
        NSDate *date1  = [defaults objectForKey:@"morningTimeKey"];
        if(!date1) date1 = [NSDate date];
        components = [gregorian components: NSUIntegerMax fromDate: date1];

        [components setHour:startTime];;
        [components setMinute:00];

        NSDate *startDate = [gregorian dateFromComponents:components];

        [components setHour:endTime];
        [components setMinute:00];

        NSDate *endDate = [gregorian dateFromComponents:components];

        morningButton.selected = YES;
        afternoonButton.selected = NO;
        eveningButton.selected = NO;
        nightButton.selected = NO;

        [userTimePicker setDatePickerMode:UIDatePickerModeTime];

        [userTimePicker setMinimumDate:startDate];
        [userTimePicker setMaximumDate:endDate];

        [userTimePicker setDate:startDate animated:YES];
        [userTimePicker reloadInputViews];

    }

    if (control.tag == 2)
    {
        self.selectedButton = control.tag;

        morningButton.selected = NO;
        afternoonButton.selected = YES;
        eveningButton.selected = NO;
        nightButton.selected = NO;

        int startTime = 12;
        int endTime = 15;

        //Saved AfterNoon time date from user defaults
        NSDate *date1  = [defaults objectForKey:@"afternoonTimeKey"];
        if(!date1) date1 = [NSDate date];

        components = [gregorian components: NSUIntegerMax fromDate: date1];

        [components setHour:startTime];
        [components setMinute:00];

        NSDate *startDate = [gregorian dateFromComponents:components];

        [components setHour:endTime];
        [components setMinute:00];

        NSDate *endDate = [gregorian dateFromComponents:components];

        [userTimePicker setDatePickerMode:UIDatePickerModeTime];

        [userTimePicker setMinimumDate:startDate];
        [userTimePicker setMaximumDate:endDate];

        [userTimePicker setDate:startDate animated:YES];
        [userTimePicker reloadInputViews];

    }
}
于 2013-05-04T18:14:53.337 回答
1
[datePicker setDate:date animated:YES];

通过当前日期

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

希望这会帮助你。

于 2013-05-04T17:12:54.760 回答
0

只需将选定的日期保存在变量中。在显示 dataPicker 时,只需设置该日期。

NSDate * date = [NSDate date]
[datePicker setDate:date animated:YES];
于 2013-05-04T17:13:43.663 回答
0

我遇到过同样的问题。出于某种原因,仅为日期选择器而不是时间选择器设置最小日期解决了我的问题:

if ([datePicker isDatePicker]) {

    //DATE PICKER
    datePicker.minimumDate = [NSDate date];

}else{

    //TIME PICKER

    //datePicker.minimumDate = [NSDate date];

}
于 2013-07-09T19:20:06.393 回答