我有一个数组,我需要在UITableView
部分显示。
我目前正按照日期顺序在一个部分下显示对象但我需要按年划分它们,我不知道该怎么做。
我的对象就像......
@interface MyEvent : NSObject
@property NSDate *date;
@property NSString *title;
@property NSString *detail;
@end
我的数组是按日期顺序排列的这些对象的数组。
我可以直接从这个数组执行此操作,还是需要将数组分成2D数组。
即。 NSArray的NSArray,其中第二个NSArray中的每个对象都在同一年。
答案 0 :(得分:1)
您可以从以下显示的链接获得帮助:
UITableView Section Headers by month of dates in array
http://oleb.net/blog/2011/12/tutorial-how-to-sort-and-group-uitableview-by-date/
答案 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;
}