2010-07-06 82 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

相关问题