如何从函数中调用heightForRowAtIndexPath

时间:2014-02-12 07:18:14

标签: objective-c xcode uitableview

我正在尝试达到以下效果:

  1. 用户点击一次
  2. 如果合同,Cell会扩展,或者如果扩展则会收缩。
  3. 到目前为止,我有一个可以监听单击的工作函数:

    - (void)handleSingleTap:(UITapGestureRecognizer *)gestureRecognizer {
        CGPoint p = [gestureRecognizer locationInView:self.tableView];
    
        NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:p];
        if(indexPath != nil) {
            [self.tableView beginUpdates];
            *Call heightForRowAtIndexPath here?*
            [self.tableView endUpdates];
        }
    }
    

    我的heightForRowAtIndexPath

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
        NSLog(@"runs");
        return 64;
    }
    

    据我在网上不同网站的帮助下,我必须在[self.tableView beginUpdates][self.tableView endUpdates]之间以某种方式调用该函数。 但是我该怎么做?我对Xcode或Objective C并不熟悉,所以我们将不胜感激!

    提前致谢。

    亚历山大。

2 个答案:

答案 0 :(得分:5)

您不要自己致电tableView:heightForRowAtIndexPath:。 tableView将调用它。 tableView将在向其发送endUpdates后调用该方法。在调用tableView:heightForRowAtIndexPath:后,您必须从handleSingleTap:返回不同的值。

您可以通过在属性(或实例变量)中保存扩展的indexPath,并在请求的indexPath与保存的扩展indexPath匹配时在tableView:heightForRowAtIndexPath:中返回不同的值来执行此操作。

e.g。

@property (strong, nonatomic) NSIndexPath *expandedIndexPath;

- (void)handleSingleTap:(UITapGestureRecognizer *)gestureRecognizer {
    CGPoint p = [gestureRecognizer locationInView:self.tableView];

    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:p];
    if(indexPath != nil) {
        self.expandedIndexPath = indexPath;
        [self.tableView beginUpdates];
        [self.tableView endUpdates];
    }
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"runs");
    if (self.expandedIndexPath && [indexPath isEqual:self.expandedIndexPath]) {
        // expanded cell
        return 200;
    }
    else {
        return 64;
}

答案 1 :(得分:0)

如果您致电[self.tableView reloadRowsAtIndexPaths:@[yourIndexPath] withRowAnimation:UITableViewRowAnimationAutomatic];,则会适当调用行的高度。 <是/> 如果您调用上述方法,则无需[self.tableView beginUpdate], [self.tableView endUpdate]