2013-10-15 2 views
0

У меня есть массив, который мне нужно отобразить в разделах UITableView.Создание разделов в течение многих лет из массива дат

В настоящее время я показываю объекты в порядке даты всего под одним разделом, но мне нужно разделить их по годам, и я не уверен, как это сделать.

Моего объекта является чем-то вроде ...

@interface MyEvent : NSObject 

@property NSDate *date; 
@property NSString *title; 
@property NSString *detail; 

@end 

Моего массив представляет собой массив из этих объектов в хронологическом порядке.

Могу ли я сделать это прямо из этого массива или мне нужно разделить массив на 2D-массив.

i.e NSArray NSArrays, где каждый объект во втором NSArray находится в том же году.

ответ

1

Это легко сделать с помощью TLIndexPathDataModel из TLIndexPathTools в качестве структуры данных. Блок на основе инициализатора предоставляет один из нескольких способов организации данных в секции:

NSArray *sortedEvents = ...; // events sorted by date 
TLIndexPathDataModel *dataModel = [[TLIndexPathDataModel alloc] initWithItems:sortedEvents sectionNameBlock:^NSString *(id item) { 
    MyEvent *event = (MyEvent *)item; 
    NSString *year = ...; // calculate section name for the given item from date 
    return year; 
} identifierBlock:nil]; 

И тогда методы источника данных становятся очень просто с помощью модели данных API:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return self.dataModel.numberOfSections; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [self.dataModel numberOfRowsInSection:section]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *cellId = ...; 
    UITableViewCell *cell = ...; // dequeue cell 
    MyEvent *event = [self.dataModel itemAtIndexPath:indexPath]; 
    ... // configure cell 
    return cell; 
} 
Смежные вопросы