有没有办法在iOS中获得分钟和小时数的Set / Array?

时间:2015-01-19 14:18:30

标签: ios objective-c ios7 ios8 uipickerview

我正在尝试以最简单的方式用分钟和小时填充我的选择器视图。我正在实施自定义选择器,因此使用UIDatePicker并将其模式设置为UIDatePickerModeTime是不可能的。

iOS中是否有可用于检索数据集的功能,或者我只需要使用0-12(12小时系统)和0-60的硬编码值分别初始化数组小时和分钟说一个for循环?

我目前正在填充数组:

#pragma mark - Lazy Loading
-(NSArray *)hourValues{
    if(!_hourValues){
        NSMutableArray *hours = [[NSMutableArray alloc] init];
        for(int i = 0; i < 12; i++){
            [hours addObject:[NSNumber numberWithInt:i]];
        }
        _hourValues = hours;
    }
    return _hourValues;
}
-(NSArray *)minuteValues{
    if(!_minuteValues){
        NSMutableArray *minutes = [[NSMutableArray alloc] init];
        for(int i = 0; i < 60; i++){
            [minutes addObject:[NSNumber numberWithInt:i]];
        }
        _minuteValues = minutes;
    }
    return _minuteValues;
}
-(NSArray *)amPmValues{
    if(!_amPmValues){
        _amPmValues = @[@"am", @"pm"];
    }
    return _amPmValues;
}

我不喜欢硬编码的值。

理想情况下,我希望能够做到这样的事情:

hours = [NSDate NS12HourSetArray];
minutes = [NSDate NS60MinuteArray];

2 个答案:

答案 0 :(得分:3)

我认为你有3个选择:

  • 编写脚本/自动创建文本数据并在运行时加载它,您可以在python / bash和plist中轻松完成。

  • 使用旧的for循环手动完成。我推荐。

  • 或者您可以分别使用NSIndexSetNSRange对象创建所需范围的索引集。

例如:

NSIndexSet *minutesIndexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 60)];

然后,您直接将您的UI加载形成索引集,或者再次枚举索引集并使用其索引填充数组。

在这两种方式中,您最终要做的是迭代循环以手动填充数组。唯一只负载的是第一个。

答案 1 :(得分:1)

没有可以像这样调用的内置方法。就个人而言,我并没有真正看到硬编码等问题的问题,例如&#34;一小时内的分钟数&#34;因为它定义明确,你可以相对肯定它不会改变。如果您希望API存在,那么您可以通过在NSDate上创建一个类别来隐藏自己。

@interface NSDate (ConvenientArrays)
+ (NSArray *)minutesInAnHourArray;
+ (NSArray *)hourRepresentationsPerDay:(BOOL)use24Hour;
@end

@implementation NSDate (ConvenientArrays)
+ (NSArray *)minutesInAnHourArray {
  return @[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9,
           10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
           20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
           30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
           40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
           50, 51, 52, 53, 54, 55, 56, 57, 58, 59];
}
+ (NSArray *)hourRepresentationsPerDay:(BOOL)use24Hour {
  if (use24Hour) {
    return @[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9,
             10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
             20, 21, 22, 23];
  }
  return @[     1,  2,  3,  4,  5,  6,  7,  8,  9,
           10, 11, 12];
}
@end