如何将单元格放入分组表中的某些部分?

时间:2009-08-11 21:37:31

标签: iphone cocoa-touch uitableview

我有一个带有类别属性(task.category)的对象类,它被设置为整数值(1,2或3)。我希望通过将每个task放入正确的部分来构建一个分组表...

如何根据其中一个属性在某个分组表的某些部分中绘制某些单元格对象?

谢谢! :)

1 个答案:

答案 0 :(得分:2)

没有办法自动完成。您仍然必须实现UITableViewDataSource的所有必要方法。为了使您的数据源方法能够提供正确的数据,您应该首先通过按类别对任务进行分组来构建一些合适的数据结构。最简单的方法是使用类别(包含在NSNumber中)作为键构建NSDictionary,并将相应任务的NSArray作为值。

要构建此字典,请执行以下操作(未经测试):

NSArray* keys = [NSArray arrayWithObjects:[NSNumber numberWithInteger:1], [NSNumber numberWithInteger:2], [NSNumber numberWithInteger:3], nil];
NSArray* objects = [NSArray arrayWithObjects:[NSMutableArray array], [NSMutableArray array], [NSMutableArray array], nil];
self.dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

for(Task* task in tasks) {    // if tasks is your array holding all tasks
    NSNumber* bucket = [NSNumber numberWithInteger:task.category];
    [[dict objectForKey:bucket] addObject:task];
}

我们必须执行此NSNumber样板的原因是您不能使用原始值(例如整数)作为字典键。

在下面的代码中有了这个字典(self.dict)之后,只需实现必要的UITableViewDataSource方法:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 3;    // supposing you have 3 categories
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSArray* tasks = [self.dict objectForKey:[NSNumber numberWithInteger:(section + 1)]];
    return [tasks count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSArray* tasks = [self.dict objectForKey:[NSNumber numberWithInteger:(indexPath.section + 1)]];
    Task* task = [tasks objectAtIndex:indexPath.row];

    // other stuff usually done here (create cell, set content of cell etc.)
}

当然,这只是一种可能的方法,但我希望它能让你走上正确的道路。