2010-07-06 83 views
0

這是我現在面臨的問題:heightForRowAtIndexPath只有一個部分?

我有很多UITableViews,每個都有兩個部分(只有一個隨時顯示,按需)。第一部分有3個單元格,可能需要調整大小。因此,我使用了heightForRowAtIndexPath。

第二部分可能有多達3.000細胞,全部採用44點的默認高度。

我的heightForRowAtIndexPath決定它是處理來自第1部分還是第2部分的單元格,然後測量(第1節)或立即返回默認值(44第2節)。

通過使用這種方法,大表視圖需要將顯示一小會兒,因爲heightForRowAtIndexPath是在這樣的情況下,性能問題(比約1.000細胞更多)。

我的問題是: 有什麼辦法來調整隻是在第一部分介紹的3個小區?任何方式可能強制heightForRowAtIndexPath被稱爲indexPath.section == 0?

如果有任何區別,我使用分組表格視圖。

謝謝。

回答

10

heightForRowAtIndexPath會如果在您的代理執行被調用。如果您只想更改第一部分中的值,則只需使用簡單的if語句。這可能看起來像:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
    // Test to see what section you're in 
    if ([indexPath section] == 0) { 
     // return the height for the first section 
    } else { 
     // return the height for everything other than the first section 
    } 
} 

乾杯。

+0

一個'開關case'樹是一種更清潔的方法測試'indexPath'節的值並返回所需的高度,但它是相同的想法。 – 2010-07-06 19:46:07

+0

這實際上是它在我的代碼中的樣子。問題是這是一個非常大的tableview性能打擊,雖然我只需要它,因爲3個單元格。所以我想知道的是,如果有解決方法。 – 2010-07-06 19:51:55

+0

您可以考慮的另一種方法(如果它適用於您的問題域)不會將此信息放置在UITableViewCell中。你是否考慮過將這些信息作爲tableview的頭文件顯示出來?這將不會被調用幾次的高度'heightForRowAtIndexPath',如果它是第一部分,那麼它有理由可以這樣實現...... – 2010-07-06 20:20:11

0

爲什麼不使用2個表視圖 - 一個用於頂部,另一個用於第二個部分?

你可以給每個UITableView一個不同的委託,或者如果他們共享這個委託,你可以從heightForRowAtIndexPath立即返回底部的UITableView。

我可能會給予他們各自不同的代表,避免了大量的委託方法切換弄清楚你是哪一節。

+0

他們會一起滾動嗎?我實際上已經考慮了一段時間,但並不認爲這實際上是可能的。 – 2010-07-06 19:54:37

+0

是的,他們會一起滾動。這就像在UIScrollView中有任何其他視圖集合一樣。 – 2010-07-06 20:22:50

+0

儘管我選擇了tomodify tableview標題,但兩個tableviews也是一個很好的解決方案。實際上,我認爲這並非可能。非常感謝你。 – 2010-07-08 22:54:21

相關問題