2010-01-12 57 views
2

我已經寫出所有的代碼將一個NSMutableArray分成UITableView的部分。但是在cellForRowAtIndexPath中,我發現indexPath.row只返回當前部分的行。有什麼方法可以簡單地提供整個UITableView的行數。如果有人需要查看代碼,我會附加它,但我不認爲這是非常有用的回答這個問題,除非我必須使用另一種算法來查找cellForRow。UITableView問題與部分

回答

2

是的,在indexPath屬性是在部分的行,所以需要存儲數組的數組(對每個部分的陣列)。喜歡的東西:

// an array of arrays, one for each section 
NSArray * _sectionDataArray; 

當你建立你的索引創建的每個部分的陣列,並將其存儲在_sectionDataArray。要做到這一點,你需要建立一個NSMutableDictionary對象,由你的部分標題鍵入,包含一個數組CellThing(包含你的單元格數據的對象)。一旦你有一本字典,你可以抓住每個字母的數組,並將其粘貼到_sectionDataArray中。

在你的cellForRowAtIndexPath方法,您可以通過獲取部分陣列這樣的訪問單元格數據:

NSArray * sectionArray = [_sectionDataArray objectAtIndex:indexPath.section]; 

一旦你的部分陣列可以訪問單個單元格數據你之後使用在indexPath

CellThing * cellObject = [sectionArray objectAtIndex:indexPath.row]; 
+0

不要在成員變量名稱前加下劃線。蘋果保留這些名字的權利! – benzado

+0

@benzado謝謝本,我沒有意識到這一點。 – RedBlueThing

0

很明顯嘛,你有深深地知道的一些方法g假定每個部分有多少行 - 你在tableview:rowsInSection:方法中提供它。

爲了論證我假設有一個在每個部分行的固定數量的緣故,所以數組索引將indexPath.section * kNumOfRowsInSection + indexPath.row

1

如果你真的要轉換的指數路徑到絕對行號,你可以這樣做:

// Start with row offset 
int absoluteRow = indexPath.row; 
// Add count of rows from all earlier sections 
int s; 
for (s = 0; s < indexPath.section; s++) { 
    absoluteRow += [tableView numberOfRowsInSection:s]; 
} 

但它可能更好地組織您的數據以匹配您的表結構。

+0

由於我的數據結構受傳入XML形狀的限制,這對我來說是必要的解決方案。不過請記住,numberOfRowsInSection:是方法名稱中的第二個標籤。應該是[tableView.dataSource tableView:tableView numberOfRowsInSection:s]; – MikeyWard

+0

你說得對,方法調用是不正確的,但不是調用數據源的方法,我調用表視圖的方法,只是爲了說服你。 :-) – benzado