繁体   English   中英

从indexPath获取UITableViewCell无法正常工作

[英]Get UITableViewCell from indexPath not Working

我试图在更新单元格高度的同时更新单元格项,但它不起作用。

[_tblBillHistory beginUpdates];
[_tblBillHistory endUpdates];

这些方法我用来更新像元高度

错误-> EXC_BAD_ACCESS(code = 2,address = 0x7fff5b4daf98)此错误消息获取cellForRowAtIndexPath方法。 Nslog还可以正确打印所选行。 任何想法??? 谢谢。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if((selectedPath!=nil ) & ([indexPath isEqual:selectedPath])) {
        NSLog(@"%ld",indexPath.row);
        UITableViewCell *tempCell = [_tblBillHistory cellForRowAtIndexPath:indexPath];

        UIStackView *stkItems=(UIStackView *)[tempCell viewWithTag:8];

        for(int i=0;i<20;i++)
        {
            UIButton *btn=[UIButton buttonWithType:UIButtonTypeSystem];
            [btn setTitle:@"test button" forState:UIControlStateNormal];
            [stkItems addArrangedSubview:btn];
        }

        return 700;
    }

    return 250;
}

我认为此方法不是更新单元组件的好地方。
如果要将元素添加到单元格,则可以使用任何其他方法来创建它,例如:

- tableView:willDisplayCell:forRowAtIndexPath:

heightForRowAtIndexPath可能被调用多次(每次reloadData或动画块)。

您应该对代码进行划分,在heightForRowAtIndexPath中,您仅应在不请求单元格的情况下计算高度(因为tableView在此方法中没有单元格)。 在您可以在didSelectMethod中创建的单元格中添加或删除元素(但更好的解决方案是将此代码移至该单元格或为所选单元格创建自定义类):

 - tableView:didSelectRowAtIndexPath:

尝试替换以下行

UITableViewCell *tempCell = [_tblBillHistory cellForRowAtIndexPath:indexPath];

与这个

UITableViewCell *tempCell = [self tableView:_tblBillHistory cellForRowAtIndexPath:indexPath];

这将停止递归调用,因为它正在将cellForRowAtIndexPath作为函数而不是作为表视图的数据源来调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM