我正在尝试以最简单的方式用分钟和小时填充我的选择器视图。我正在实施自定义选择器,因此使用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];
答案 0 :(得分:3)
我认为你有3个选择:
编写脚本/自动创建文本数据并在运行时加载它,您可以在python / bash和plist中轻松完成。
使用旧的for循环手动完成。我推荐。
或者您可以分别使用NSIndexSet
和NSRange
对象创建所需范围的索引集。
例如:
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