我有一个对象(核心数据对象),该对象具有一个名为"周"定义这个对象创建的前几周。
现在我在表视图中显示这种类型的对象,并且我将此表视图创建为分组表视图,现在我想按周数设置分组表视图的标题。
所以
标题:2周前 OBJ1 OBJ2 heaser:3周前 OBJ 3 OBJ4 obj5所以我猜这个魔法发生在:
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
//Settings up the sections title
if(section == 0) {
return @"something";
} else {
return @"something";
}
}
所以现在我有了这个名为Target的对象,以及它的周属性(target.weeks)。 如何使用它来设置按对象周数分组的标题?
thanksss
答案 0 :(得分:0)
由于您正在处理核心数据,因此最佳解决方案是使用NSFetchedResultsController。 Apple提供此类专门用于获取核心数据对象并在表视图上显示它们,您甚至可以提及您希望将对象分类为多个部分的属性。
在非核心数据场景中,一种方法是创建一个NSDictionary,每个部分都有一个条目。没有什么能阻止您将此技术用于核心数据对象。但NSFetchedResultsController要好得多。键将是节标题,值将是您希望在该节中显示的对象的NSArray。 你的字典看起来像{sec1:[row0Obj,row1obj],sec2:[row0Obj,row1Obj]}
NSDictionary *dataSourceDictionary; //Add data to this dictionary as explained above
- (NSDictionary *)entryForSection:(NSInteger)section {
NSArray *allSections = [dataSourceDictionary allKeys];
//sort the sections array here to make sure your setions appear in correct order
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"self" ascending:YES];
allSections = [allSections sortedArrayUsingDescriptors:@[sortDescriptor]];
NSString *sectionTitle = allSections[section];
NSArray *objectsInSection = dataSourceDictionary[sectionTitle];
return @{ sectionTitle : objectsInSection };
}
- (NSArray *)objectsForSection:(NSInteger)section {
NSDictionary *entry = [self entryForSection:section];
NSArray *objects = (NSArray *)entry.allValues.firstObject;
return objects;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return dataSourceDictionary.count;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [self objectsForSection:section].count;
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
NSDictionary *entry = [self entryForSection:section];
NSString *title = entry.allKeys.firstObject;
return title;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSArray *objectsForSection = [self objectsForSection:indexPath.section];
id objectForRow = objectsForSection[indexPath.row];
//Configure your cell using objectForRow
//[cell configureWithObject:object];
//return cell;
}