2013-10-15 1 views
0

배열에 UITableView 섹션에 표시해야하는 배열이 있습니다.날짜 배열에서 몇 년 동안 섹션 만들기

현재 한 섹션 아래에 모두 개체가 날짜 순서로 표시되고 있지만 일년에 한 번씩 섹션을 만들어야하고 어떻게해야하는지 잘 모르겠습니다.

내 객체

@interface MyEvent : NSObject 

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

@end 

내 배열은 날짜 순서대로 객체의 배열입니다 ... 뭔가 같은 것입니다.

이 배열에서이 작업을 직접 수행 할 수 있습니까? 아니면 배열을 2D 배열로 분리해야합니까?

즉 두 번째 NSArray의 각 객체가 같은 해에있는 NSArray의 NSArray입니다.

답변

1

이 데이터 구조로 TLIndexPathTools에서 TLIndexPathDataModel을 사용하여이 작업을 수행하기 쉽습니다.

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; 
} 
을 블록 기반 초기화 섹션으로 데이터를 구성하는 몇 가지 방법 중 하나를 제공합니다
관련 문제