您可以保存所有的事件,其中有日期作爲鍵的字典。
假設您的頭文件(.h)文件中有_eventsDictionary
和_events
作爲ivar。 NSMutableDictionary *_eventsDictionary;
NSArray *_events
- (void)reloadTableData {
_eventsDictionary = [NSMutableDictionary dictionary];
for (Event *ev in _events) {
NSMutableArray *eventArray = [_eventsDictionary objectForKey:ev.date];
if (! eventArray) {
// first event for this date
eventArray = [NSMutableArray array];
[_eventsDictionary setObject:eventArray forKey:ev.date];
}
[eventArray addObject:ev];
}
[self.tableView reloadData];
}
現在,你必須在陣列中的所有事件,這是在_eventsDictionary
。
- (NSString *)dateStringAtIndex:(NSInteger)index {
// Actually I prefer sort them as date objects
// Since you have all dates as string, it should ok for you
NSArray *allSortedKeys = [[_eventsDictionary allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
return [allSortedKeys objectAtIndex:index];
}
- (NSArray *)eventsArrayAtIndex:(NSInteger)index {
NSArray *eventsArray = [_eventDictionary objectForKey:[self dateStringAtIndex:index]];
return eventsArray;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return _eventDictionary.count;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [[self eventsArrayAtIndex:section] count];
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
return [self dateStringAtIndex:section];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
cell = .....
.....
NSArray *eventsArray = [self eventsArrayAtIndex:indexPath.section];
Event *ev = [eventsArray objectAtIndex.row];
// configure your cell with the event
// eg. cell.textLabel.text = ev.time
return cell;
}
現在你可以調用[自我reloadTableData]後的地方你的事件在你的事件數組,它使工作適合你。
也許這不是真的是你的問題最好的標題? – Mert
提供一個更好的,我會改變它! – doonot