UITableViewCell:动态细胞高度由细胞标识符'

时间:2014-07-14 15:20:33

标签: ios uitableview

(注意:我使用的tableView来自Parse.com iOS SDK - PFQueryTableViewController)

场景 =我有一个TableViewController,它有两种不同类型的单元格(每个单元格都有自己的标识符)。如果对象上的键为true,则检查每个查询并加载到数据源中的对象。根据结果​​,我将ReusueReusableCellWithIdentifier dequeue到正确的单元格。

-(PFTableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object {

    myTableViewCell *cell;

    if ([object[@"orientation"] isEqualToString:@"left"] || [object[@"orientation"] isEqualToString:@"right"]) {

        myTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

    else {

        myTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell2"];
    }

这一切都有它的作用。每个单元格都在正确的indexPath.row和所有内容中加载。问题是我的tableView"行高"本身不会重新调整新细胞。这会导致细胞重叠并使一切变得丑陋。我可以告诉storyboard中的tableView将行高设置为两个单元格高度中的较大者,但是在单元格之间留下了很大的空间,这也使它看起来很难看。

问题 =我需要使用

这是我的信念(并纠正我,如果我错了)
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

方法以实现这一目标。在我需要帮助的地方,我不知道如何在indexPath上设置每个单元格的高度,具体取决于'标识符'我在cellForRowAtIndexPath方法中给每个单元格。

我正在寻找什么 =这样的事情(请原谅SuedoCode)

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    if ([cell.identifier isEqual:@"Cell"] {

    return 100;

    }

    else {

    return 200;

    }
}

答案:我明白了!(我将下面的答案标记为已被接受,因为它指出了我正确的方向)

因为我使用的是PFQueryTableViewController,所以我必须这样做......

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    PFObject *object = [self.objects objectAtIndex:indexPath.row];

    if ([object[@"orientation"] isEqual:@"left"] || [object[@"orientation"] isEqual:@"right"]) {

        return 100;
    }

    else {

       return 200;
    }

}

1 个答案:

答案 0 :(得分:1)

首先,要记住一些事情。在CellForRowatIndexPath之前调用heightForRowAtindexPath,简单地说,如果object在indexPath X,则返回Y或Z.

更正确的方法可能是对tableCell类进行子类化,在.h文件中设置一个属性,然后找出路径......我会给你一个肮脏的方法:)

创建一个NSMutableArray属性(不要忘记在某处/以某种方式初始化它),并根据您的dataSource,用高度A或高度B(浮点数)填充它。现在,回到heightForRowAtIndexPath,您可以说出以下内容:

return (int)self.myMutableArray[indexPath.row];