2

我是iOS开发的初学者,所以也许这是我的一个愚蠢的愿望。尽管如此,事情是:我正在制作我的应用程序的统计部分,它应该让用户选择某个月份和年份,他会在他之前输入的不同条目的这段时间内获得一些统计结果。困难的部分是我还想为月份组件实现“全年”选择,因此用户可以选择例如月份的“全部”和年份的“2013”​​,他将获得整个 2013 年的统计数据. 我在这个网站或谷歌上根本找不到任何这样的例子,因为在所有情况下,DatePicker 都会返回特定日期,而不是日期范围。所以我得出结论,也许是 这不是您在 iOS 中执行此类任务的方式吗?我想到的一个选项是实现两个日期选择器,一个用于“从”,一个用于“直到”,但这似乎有点乏味......基本上,我希望用户能够选择某个月份或年份查看该时间段的统计信息。如果您能给我一些建议,我将不胜感激,您通常如何在 iOS 中处理类似这样的任务。谢谢。

更新:谢谢大家的回答!

4

4 回答 4

3

正如 rmaddy 所说,使用 UIPickerView。并使用像这样的适当委托方法自定义选择器的数据源。

设置日期来源(例如)

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

你会得到你所期望的。

于 2013-04-28T06:55:26.040 回答
3

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

于 2013-04-28T06:21:15.550 回答
1

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

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

  2. 在视图层次结构中添加一个UISwitch启用“所有月份”的位置。打开时,从日期选择器中删除月份组件,并在关闭开关时将其添加回来。这与 Apple 在您创建新事件时在日历应用程序中所做的非常相似。

于 2013-04-28T06:25:31.747 回答
0

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

于 2014-03-19T07:35:12.433 回答