在 Xcode 上使用 NSDatePickerView 分别处理日期和时间
Working with Date and Time separately using NSDatePickerView on Xcode
我有一部分应用程序可以设置约会的日期和时间。为此,我有两个NSDatePickerView
。第一个我设置为NSDatePickerModeDate
,而另一个设置为NSDatePickerModeTime
。但实际上他们应该在 NSMutableDictionary
条目中引用相同的 NSDate
对象。我知道 NSDatePickerModeDateTime
,但我需要单独选择日期和时间。
我知道如何设置 NSDatePickerView
来显示和隐藏以及事件控制等,但是在事件控制 UIControlEventValueChanged
触发 NSDatePickerView
时,我很困惑如何为此更改编码,以及如何初始化选择器 (datePicker.date = today, timePicker.date = "9:00 AM")
@interface MyViewController () {
NSMutableDictionary *data;
}
@end
@implementation MyViewController
@synthesize datePicker, timePicker;
- (void) viewDidLoad {
[super viewDidLoad];
data = [[NSMutableDictionary alloc] init];
[data setObject:[NSDate date] forKey:@"date"];
datePicker.datePickerMode = UIDatePickerModeDate;
timePicker.datePickerMode = UIDatePickerModeTime;
[datePicker addTarget:self action:@selector(changeDate:) forControlEvents:UIControlEventValueChanged];
[timePicker addTarget:self action:@selector(changeTime:) forControlEvents:UIControlEventValueChanged];
datePicker.date = data[@"date"]; //????
timePicker.date = data[@"date"]; //????
}
- (IBAction) changeDate:(id)sender {
UIDatePickerView *dp = (UIDatePickerView *)sender;
[data setObject:dp.date forKey:@"date"]; //????
}
- (IBAction) changeTime:(id)sender {
UIDatePickerView *tp = (UIDatePickerView *)sender;
[data setObject:tp.date forKey:@"date"]; //????
}
我不知道如何编码的部分用//????
表示。我在一些答案中读到了 NSDateFormatter
、NSCalendar
和某种日期组件,但这实际上让我更加困惑,因为它也将字符串和结构混合在一起,使用什么来什么时候做什么。请帮忙。
你可以试试这个
///将完整日期转换为唯一日期
- (IBAction) changeDate:(UIDatePickerView *)sender {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM/dd/yyyy"];
NSString *dateStr = [dateFormatter stringFromDate:[sender date]];
[data setObject:dateStr forKey:@"date"];
}
///将日期转换为时间格式
- (IBAction) changeTime:(UIDatePickerView *)sender {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"hh:mm a"];
NSString *dateStr = [dateFormatter stringFromDate:[sender date]];
[data setObject:dateStr forKey:@"Time"];
}
您可以将两个日期选择器设置为相同的日期和时间。未使用的部分在那里,但不显示且无法更改。当用户更改一个日期选择器的值时,您必须将另一个日期选择器设置为相同的值。
- (IBAction)changeDate:(id)sender {
NSDatePicker *dp = (NSDatePicker *)sender;
[data setObject:dp.dateValue forKey:@"date"];
self.timePicker.dateValue = dp.dateValue;
}
- (IBAction)changeTime:(id)sender {
NSDatePicker *tp = (NSDatePicker *)sender;
[data setObject:tp.dateValue forKey:@"date"];
self.datePicker.dateValue = tp.dateValue;
}
我有一部分应用程序可以设置约会的日期和时间。为此,我有两个NSDatePickerView
。第一个我设置为NSDatePickerModeDate
,而另一个设置为NSDatePickerModeTime
。但实际上他们应该在 NSMutableDictionary
条目中引用相同的 NSDate
对象。我知道 NSDatePickerModeDateTime
,但我需要单独选择日期和时间。
我知道如何设置 NSDatePickerView
来显示和隐藏以及事件控制等,但是在事件控制 UIControlEventValueChanged
触发 NSDatePickerView
时,我很困惑如何为此更改编码,以及如何初始化选择器 (datePicker.date = today, timePicker.date = "9:00 AM")
@interface MyViewController () {
NSMutableDictionary *data;
}
@end
@implementation MyViewController
@synthesize datePicker, timePicker;
- (void) viewDidLoad {
[super viewDidLoad];
data = [[NSMutableDictionary alloc] init];
[data setObject:[NSDate date] forKey:@"date"];
datePicker.datePickerMode = UIDatePickerModeDate;
timePicker.datePickerMode = UIDatePickerModeTime;
[datePicker addTarget:self action:@selector(changeDate:) forControlEvents:UIControlEventValueChanged];
[timePicker addTarget:self action:@selector(changeTime:) forControlEvents:UIControlEventValueChanged];
datePicker.date = data[@"date"]; //????
timePicker.date = data[@"date"]; //????
}
- (IBAction) changeDate:(id)sender {
UIDatePickerView *dp = (UIDatePickerView *)sender;
[data setObject:dp.date forKey:@"date"]; //????
}
- (IBAction) changeTime:(id)sender {
UIDatePickerView *tp = (UIDatePickerView *)sender;
[data setObject:tp.date forKey:@"date"]; //????
}
我不知道如何编码的部分用//????
表示。我在一些答案中读到了 NSDateFormatter
、NSCalendar
和某种日期组件,但这实际上让我更加困惑,因为它也将字符串和结构混合在一起,使用什么来什么时候做什么。请帮忙。
你可以试试这个
///将完整日期转换为唯一日期
- (IBAction) changeDate:(UIDatePickerView *)sender {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM/dd/yyyy"];
NSString *dateStr = [dateFormatter stringFromDate:[sender date]];
[data setObject:dateStr forKey:@"date"];
}
///将日期转换为时间格式
- (IBAction) changeTime:(UIDatePickerView *)sender {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"hh:mm a"];
NSString *dateStr = [dateFormatter stringFromDate:[sender date]];
[data setObject:dateStr forKey:@"Time"];
}
您可以将两个日期选择器设置为相同的日期和时间。未使用的部分在那里,但不显示且无法更改。当用户更改一个日期选择器的值时,您必须将另一个日期选择器设置为相同的值。
- (IBAction)changeDate:(id)sender {
NSDatePicker *dp = (NSDatePicker *)sender;
[data setObject:dp.dateValue forKey:@"date"];
self.timePicker.dateValue = dp.dateValue;
}
- (IBAction)changeTime:(id)sender {
NSDatePicker *tp = (NSDatePicker *)sender;
[data setObject:tp.dateValue forKey:@"date"];
self.datePicker.dateValue = tp.dateValue;
}