2010-05-03 33 views
0

我有一個由數組填充的tableview。目前該tableview沒有分組。我想要做的是檢查每個數組對象的值,例如狀態,並將所有CA項目組合在一起,將所有OR項目組合在一起等等。然後,爲這些組分配一個標題。iPhone tableview:titleForHeaderInSection從數組派生

該數組是動態的,將來會增長並獲得新的值,所以我不能硬編碼標題,我想這些以某種方式來自我的初始數組。

目前我正在使用以下內容,但沒有考慮數組的排序,或者如果我刪除了與加利福尼亞州有關的所有項目。

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
if (section == 0) { 
    return @"California"; 
} else if (section == 1) { 
    return @"Washington"; 
} else { 
    return @"Utah"; 
} 
}//end tableView 

所以,我很困惑自己如何這將是可能的。任何提示將不勝感激。

回答

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 
} 
+0

好吧,現在我們正在這裏得到一些地方。 有沒有一種基於if語句創建單獨數組的好方法?所以,我可以檢查我的初始數組中的每個項目是否來自某個特定狀態,然後將這些項目推送到另一個數組中。只是不知道這將如何工作... – 2010-05-04 16:28:24

+0

我編輯我的答案添加一些更多的細節。 – progrmr 2010-05-04 18:12:44