Допустим, что мой UITableView заполняется массивом X количества NSDates.Как я могу отсортировать их так, чтобы UITableView имитировал приложение Phone на iPhone, но таким образом, чтобы в UITableView был раздел для каждого дня, который представлен датой (или несколькими датами) в массиве?
Редактировать: Прорыв!Чтобы выяснить, сколько разделов мне нужно, я использую это:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
NSArray* array = [[NSUserDefaults standardUserDefaults] objectForKey:@"mapSaveDataKey"];
NSMutableArray* dateStrings = [[NSMutableArray alloc] init];
for(NSArray* innerArray in array)
[dateStrings addObject:[dateFormatter stringFromDate:[innerArray objectAtIndex:13]]];
NSArray *cleanedArray = [[NSSet setWithArray:dateStrings] allObjects];
return [cleanedArray count];
}
Взяв массив строк DateStrings, отформатированных NSDates, используя NSDateFormatter со следующими настройками:
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setDoesRelativeDateFormatting:YES];
Iможет получить список строковых дат, причем каждая строка в один и тот же день одинакова независимо от времени.Затем я могу использовать NSSet для получения массива с теми же строками, исключая дубликаты, и счетчик этого массива - это количество секций, которое мне нужно.Отлично.
Теперь перейдем к самой трудной части: как я могу взять этот массив строк (или исходный массив NSDates) и выяснить, сколько дубликатов есть на каждый день, и использовать эту информацию, чтобы решить, сколько строкнужны в каждом разделе UITableView?И чтобы сделать вещи более сложными, их нужно заказывать от недавнего к старому.(Существует также вопрос выяснения, какие ячейки должны идти в каком разделе, но это можно выяснить позже)
Решено благодаря красноречивому решению от Оле Бегеманна.+100 к вам Я использую этот цикл, чтобы выяснить, когда в моем массиве мне нужно начинать для каждого раздела:
int offset = 0;
for(int idx = 0; idx < [tableViewOutlet numberOfSections]; idx++) {
if(idx == indexPath.section)
break;
offset += [tableViewOutlet numberOfRowsInSection:idx];
}