如何根据对象值创建titleForHeaderInSection

时间:2015-07-25 00:04:38

标签: ios objective-c uitableview

我有一个对象(核心数据对象),该对象具有一个名为"周"定义这个对象创建的前几周。

现在我在表视图中显示这种类型的对象,并且我将此表视图创建为分组表视图,现在我想按周数设置分组表视图的标题。

所以

标题: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

1 个答案:

答案 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;
}