2013-05-04 39 views
1

我有一個UIDatepicker讓我讓用戶選擇時間。 UITableview是在UIView點擊一個UIButton一個UIDdatePicker出現時,當用戶選擇一個時間,然後按回退按鈕關閉UIDdatePicker視圖,如果他想檢查他在UIDdatePicker選擇什麼時間。 UIDdatePicker不顯示用戶選擇的時間,它顯示datepicker的當前時間或時間開始時間。 我想要顯示用戶在他再次打開日期選擇器時所選擇的時間。 這是我當用戶按下UIButton顯示UIDdatePicker視圖代碼如何使UIDatePicker顯示用戶選擇的時間

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

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

這是我的代碼,它可以讓日期選擇定製時間限制

-(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; 
} 

回答

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]; 

    } 
} 
+0

我不應該做reloadInputViews權和的setDate:不應該我通過DATE1因爲它的時間選擇我的用戶和當datepicker再次打開時,它顯示用戶選擇的時間 – raptor 2013-05-05 02:42:05

+0

@raptor我無法完全理解你的代碼,你應該使用你存儲在userDefaults中的日期,但是你想創建一個最大日期和最小日期。這就是爲什麼我保留其他代碼的原因。是的reloadInputViews是不需要的。 – Anupdas 2013-05-05 03:38:55

+0

@raptor如果你想創建一個最小值和最大值,而不是修改整個日期,你可以創建另一個日期,通過添加timeInterval來獲取morningTime和afternoonTime的maxDate。 – Anupdas 2013-05-05 03:42:59

1
[datePicker setDate:date animated:YES]; 

通過當前日期與

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

希望這會幫助你。

0

只需將選定的日期保存在變量中。 在顯示dataPicker時,只需設置該日期即可。

NSDate * date = [NSDate date] 
[datePicker setDate:date animated:YES]; 
0

我有同樣的問題。出於某種原因,制定最低日只爲日期選擇器而不是時間選擇器解決了我的問題:

if ([datePicker isDatePicker]) { 

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

}else{ 

    //TIME PICKER 

    //datePicker.minimumDate = [NSDate date]; 

} 
相關問題