Reputation: 291
I have a UIDatepicker where I am letting user chose time . UITableview
is in a UIView
where on click of a UIButton
a UIDdatePicker
appears, when the user choose a time and press back button to dismiss UIDdatePicker
view and if he wants to check whats the time he had chose in UIDdatePicker
. The UIDdatePicker
doesn't show the time which the user had selected it shows the current time or the time start time of datepicker . I want to display the time user has chosen by the user when he opens datepicker again.
This is my code for when user press UIButton
to display UIDdatePicker
view
-(IBAction)settingsButtonChanged:(UIButton *)sender
{
userTimePicker = [[UIDatePicker alloc]init];
[userTimePicker addTarget: self
action: @selector(userTimePickerValueChanged:)forControlEvents: UIControlEventValueChanged];
}
This is my code which lets datepicker have custom time limit
-(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];
}
}
Code which lets user selects his own time
-(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;
}
Upvotes: 1
Views: 3151
Reputation: 1555
I had the same issue. For some reason setting the minimum date only for the date picker and not for the time picker solved my issue:
if ([datePicker isDatePicker]) {
//DATE PICKER
datePicker.minimumDate = [NSDate date];
}else{
//TIME PICKER
//datePicker.minimumDate = [NSDate date];
}
Upvotes: 0
Reputation: 10201
From what I could make out from the code you are saving the selected time to NSUserDefaults
, but you are never using the saved time back from it.
My guess that if you change that everything should work.
-(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];
}
}
Upvotes: 2
Reputation: 3698
Just save selected date in the variable. On showing dataPicker, just set that date.
NSDate * date = [NSDate date]
[datePicker setDate:date animated:YES];
Upvotes: 0
Reputation: 2046
[datePicker setDate:date animated:YES];
pass current date with
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
hope this will help you.
Upvotes: 1