iPhone tableview:从数组派生的titleForHeaderInSection

时间:2010-05-03 23:07:46

标签: iphone objective-c uitableview arrays

我有一个由数组填充的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

所以,我对如何做到这一点感到困惑。任何提示将不胜感激。

1 个答案:

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