我有一个由数组填充的tableview。目前,tableview没有分组。我想要做的是检查每个数组对象的值,例如State,并将所有CA项组合在一起,将所有OR项组合在一起等等。然后,为这些组分配标题。
数组是动态的,并且将来会增长并获得新的值,所以我不能对标题进行硬编码,我希望这些来自我的初始数组。
目前我正在使用以下内容,但它没有考虑数组的排序,或者我是否删除了数组中与加利福尼亚有关的所有项目。
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
if (section == 0) {
return @"California";
} else if (section == 1) {
return @"Washington";
} else {
return @"Utah";
}
}//end tableView
所以,我对如何做到这一点感到困惑。任何提示将不胜感激。
答案 0 :(得分:3)
每个州/省/等我会有一个数组,并使用状态作为键将这些数组放入字典中。然后是另一个包含所有状态键的数组。添加或删除字典时,使用keysSortedByValueUsingSelector创建/更新状态键数组。还有一些像这样的代码来实现表委托...
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [stateKeyArray count];
}
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
return [stateKeyArray objectAtIndex:section];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSString* stateKey = [stateKeyArray objectAtIndex:section];
return [[dataDict objectForKey:stateKey] count];
}
编辑:这些数组和字典可能会声明如下:
// key=state (an NSString), obj=NSMutableArray of AddressRecord objects
NSMutableDictionary* dataDict;
// sorted array of state keys (NSString)
NSMutableArray* stateKeyArray;
要添加新的地址记录,应该这样做。你需要类似的东西去除一个地址,但你现在应该有足够的东西来解决这个问题。
-(void)addAddress:(AddressRecord* addr) {
NSMutableArray* stateArray = [dataDict objectForKey:addr.state];
if (stateArray==nil) {
// adding a new state
stateArray = [NSMutableArray new];
[dataDict setObject:stateArray forKey:addr.state]; // add state array to dict
[stateArray release];
// update array of state keys (assuming they are NSString)
self.stateKeyArray = [dataDict keysSortedByValueUsingSelector:@selector(localizedCompare:)];
}
[stateArray addObject:addr]; // add address to state array
}