2012-06-14 69 views
0

我正在創建一個靜態表視圖(必須與iOS 4兼容 - 因此我無法使用iOS 5的方法)。靜態表視圖

我擁有它的方式是我有兩個部分;第一個有一個單元,第二個有兩個單元。我做了兩個數組,第一部分中唯一的單元格的標題,第二部分中的兩個單元格都使用了兩個標題。所以,我的字典裏是這樣的:

(NSDictionary *) { 
    First =  (
     Title1  < --- Array (1 item) 
    ); 
    Second =  (
     "Title1", < --- Array (2 items) 
     Title2 
    ); 
} 

我的問題是,我需要使用tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section一個部分返回的行數。所以我的問題是,如何使用NSInteger section從字典中檢索該部分?我也必須在tableView:cellForRowAtIndexPath中做同樣的事情。

謝謝

+0

靜態是如何「靜態」的?如果表大小真的是不可變的,那麼你不能只是在tableView中做一個切換部分:(UITableView *)tableView numberOfRowsInSection:(NSInteger)部分並返回適當的值? – strings42

+1

你爲什麼要用字典?如果你不太嚴重地簡化你的問題,這隻會讓問題複雜化。如果它只有兩個數組,只需使用兩個iVar;如果它是任意數量的需要保持有序的數組,則使用一組數組。 – fzwo

回答

1

如果你不」瞭解字典是如何工作的,我建議簡化問題。爲每個部分創建一個數組,然後在委託方法內使用switch()語句爲行數計數調用[array count]等。對於部分計數,您仍可以使用[[dictionary allKeys] count]的原始字典。

編輯: 我剛纔看到@fzwo建議兩點意見

-3

爲了讓你的部分,你可以使用下面的行數:

tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    NSString *key = [[dictionary allKeys] objectAtIndex: section]; 
    return [[dictionary objectForKey:key] count]; 
} 

而得到單元格的值:

tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSString *key = [[dictionary allKeys] objectAtIndex: indexPath.section]; 
    NSArray *values = [dictionary objectForKey:key]; 
    NSString *value = [values objectAtIndex: indexPath.row]; 

    // code to create a cell 

    return cell; 
} 
+1

-1。在'allKeys'的文檔中明確指出:**數組中元素的順序沒有定義。** – fzwo

+0

@fzwo然後緩存它們或使用OrderedDictionary:http://cocoawithlove.com/2008/12 /ordereddictionary-subclassing-cocoa.html –

+0

這對於手頭的問題來說是完全矯枉過正的。即使是字典本身也是過分矯枉過正的事情,正如問題的存在所證明的那樣。 – fzwo

1

同樣的事情,你最好的賭注是一個數組的數組,如已經提到。爲避免字典的複雜性,請爲表格數據和章節標題創建兩個NSArray ivars。

// in viewDidLoad 

tableData = [NSArray arrayWithObjects: 
    [NSArray arrayWithObjects: 
     @"Row one title", 
     @"Row two title", 
     nil], 
    [NSArray arrayWithObjects: 
     @"Row one title", 
     @"Row two title", 
     @"Row three title", 
     nil], 
    nil]; 
sectionTitles = [NSArray arrayWithObjects: 
    @"Section one title", 
    @"Section two title", 
    nil]; 

// in numberOfSections: 
return tableData.count; 

// in numberOfRowsInSection: 
return [[tableData objectAtIndex:section] count]; 

// in titleForHeaderInSection: 
return [sectionTitles objectAtIndex:section]; 

// in cellForRowAtIndexPath: 
... 
cell.textLabel.text = [[tableData objectAtIndex:indexPath.section] 
         objectAtIndex:indexPath.row]; 

如果您需要更多可用於您的單元格的數據,則可以使用其他對象而不是行標題。