从日期数组创建多年的部分

时间:2013-10-15 12:42:49

标签: ios objective-c uitableview

我有一个数组,我需要在UITableView部分显示。

我目前正按照日期顺序在一个部分下显示对象但我需要按年划分它们,我不知道该怎么做。

我的对象就像......

@interface MyEvent : NSObject

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

@end

我的数组是按日期顺序排列的这些对象的数组。

我可以直接从这个数组执行此操作,还是需要将数组分成2D数组。

即。 NSArray的NSArray,其中第二个NSArray中的每个对象都在同一年。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分: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;
}