如何使用两个组件(月和年)创建DatePicker,这也会显示所有月份作为选择全年的选项?

时间:2013-04-28 06:07:02

标签: ios uidatepicker

我是iOS开发的初学者,所以也许这是我身边的一个愚蠢的愿望。 然而,事情是:我正在制作我的应用程序的统计部分,这应该让用户选择某个月份和年份,并且他将获得他之前输入的不同条目的那段时间的一些统计结果。 困难的部分是我也想实施“全年”选择月份组件,因此用户可以选择,例如,“全部”月份和“2013”​​年份,他将获得整个2013年的统计数据。我无法在此网站或谷歌中找到任何此类示例,因为在所有情况下,DatePicker都会返回特定日期,而不是日期范围。 所以我得出结论,也许这不是你在iOS中做这样一个任务的方式?我想到的其中一个选项是实现两个日期选择器,一个用于'从',一个用于'直到',但它似乎有点单调乏味...... 基本上,我希望用户能够选择某个月或一年来查看该段时间的统计数据。 我很感激你是否可以给我一些建议,告诉你如何在iOS中继续执行这样的任务。 感谢。

更新:感谢大家的答案!

4 个答案:

答案 0 :(得分:3)

只需使用UIPickerView即可。设置选择器和数据源,使其具有两个组件。一个月(1月至12月加上你的“全部”选项)和另一个月份。

答案 1 :(得分:3)

使用UIPickerView作为rmaddy说。并使用适当的委托方法自定义选择器的数据源。

设置日期来源(例如)

soureYear = [[NSMutableArray alloc] initWithObjects:@"2001",@"2002",@"2003",@"2004",@"2005",@"2006",@"2007",@"2008",@"2009",@"2010",@"2011",@"2012",@"2013", nil];
    soureMonth = [[NSMutableArray alloc] initWithObjects:@"Jan",@"Feb",@"Mar",@"Apl",@"May",@"Jun",@"July",@"Aug",@"Sep",@"Oct",@"Nov",@"Dec", nil];

委派方法。

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 2;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
     if(component == 1)
         return [soureMonth count];
    else
        return [soureYear count];
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{

    if(component == 0)
        return [soureYear objectAtIndex:row];

    return [soureMonth objectAtIndex:row];
}

从选择器中获取所选项目

-(IBAction)selectedItem
{
  NSLog(@" %@", [soureYear objectAtIndex:[sample2 selectedRowInComponent:0]]);
    NSLog(@" %@", [soureMonth objectAtIndex:[sample2 selectedRowInComponent:1]]);
}

您将获得您的预期。

答案 2 :(得分:1)

有两种方法可以实现这一点。

  1. 创建一个非常模仿UIPickerView行为的自定义UIDatePicker,但会添加“所有月份”行。

  2. 在视图层次结构中的某处添加UISwitch,以启用“所有月份”。打开电源后,从日期选择器中删除月份组件,并在关闭开关时将其添加回来。这与Apple在创建新活动时在日历应用中的行为非常相似。

答案 3 :(得分:0)

此外,github中有一个很好的UIComponent,可以用于此目的 链接到组件:DRK MonthSelector