客户想要一个只有一个组件可选的 UIDatePicker。因此,客户不需要单独的日/月和年选项,而只希望选择一个完整的日期(即 05-03-2013)
我是否需要为此构建一个自定义的 pickerview,它具有来自 nsdateformatter 的数据源,或者我可以使用 native UIDatePicker 并只显示 1 个组件吗?
编辑:
经过一些研究,我最终得到了以下实现。我首先设置开始和结束日期的地方。后记我遍历了开始和结束日期之间的所有日子,并将它们保存在一个可变数组中。
int numberOfDaysToThePast = 356;
NSDate * startDate = [NSDate date];
NSDate * endDate = [NSDate date];
startDate = [startDate addTimeInterval:-(24 * 60 * 60* numberOfDaysToThePast)];
dateArray = [[NSMutableArray alloc] init];
for (NSDate *date = [startDate copy]; [date compare: endDate] < 0;
date = [date dateByAddingTimeInterval:24 * 60 * 60] ) {
NSString* dateString = [formatter stringFromDate:date];
[dateArray addObject:dateString];
}
//add custom picker
pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, 320, 200)];
pickerView.delegate = self;
pickerView.dataSource = self;
[self.view addSubview:pickerView];
最佳答案
我有一个小代码片段,但从一年的角度来看,您可以做一些小的更改,这样就可以了
用于创建自 1960 年以来所有年份数组的 Objective-C 代码。非常适合输入到 UIPicker 中
//Get Current Year into i2
NSDateFormatter* formatter = [[[NSDateFormatter alloc] init]autorelease];
[formatter setDateFormat:@"yyyy"];
int i2 = [[formatter stringFromDate:[NSDate date]] intValue];
//Create Years Array from 1960 to This year
years = [[NSMutableArray alloc] init];
for (int i=1960; i<=i2; i++) {
[years addObject:[NSString stringWithFormat:@"%d",i]];
}
UIPickerView 委托(delegate)响应
- (NSInteger)numberOfComponentsInPickerView: (UIPickerView*)thePickerView {
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component
{
return [years count];
}
- (NSString *)pickerView:(UIPickerView *)thePickerView
titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return [years objectAtIndex:row];
不要忘记接口(interface)中的声明
//Data
NSMutableArray *years;
我希望我能帮助你,如果不让我知道问题出在哪里好运和 HF
关于iphone - 如何实现每天只显示一个组件的 UIDatepicker?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15225331/