iOS:在cellForRowAtIndexPath之外更改UITableViewCell:

时间:2012-07-26 19:47:53

标签: ios uitableview

我正在尝试在我的UITableView中实现“加载更多”单元格。

如何以编程方式更改单元格“加载更多”的内容,高度等?我假设这可以通过获取所选单元格来完成,如下所示。当我想要更改背景颜色时 - 它没有任何效果。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if(indexPath.row == 2){
        UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

}

4 个答案:

答案 0 :(得分:2)

调用此函数:

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation (UITableViewRowAnimation)animation

这样的事情:

NSIndexPath* rowToReload = [NSIndexPath indexPathForRow:3 inSection:0];
NSArray* rowsToReload = [NSArray arrayWithObjects:rowToReload, nil];
[UITableView reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationNone];

更多信息here

答案 1 :(得分:1)

我认为直接调用表视图委托消息不是一个好方法...也许你想要为这个“加载更多”单元格视图显示一个额外的行并且在那时设置一个标志调用表视图的reloadData消息(或插入/重新加载单个单元视图)。

答案 2 :(得分:0)

如果你想改变身高,可以这样做:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
        if(indexPath.row == 0){
            return 25;
        } else {
            return 120;         
        }
}

如果你想改变颜色,就这样做

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
        if(indexPath.row == 0){
            cell.backgroundColor =  [[UIColor alloc]initWithRed:50.0/255.0 green:50.0/255.0 blue:100.0/255.0 alpha:1];
        } else {
            cell.backgroundColor = [UIColor whiteColor];
        }

//or use cell.textLabel.textColor to change the text color

}

答案 3 :(得分:0)

如果您的负载更多位于表格的最底部,请将其实现为表格页脚。 你不会用额外的索引搞砸你的数据源,你可以免费使用flyweight来修改它/根据你的需要调整它的大小。

像:     tableView.tableFooterView = theFooterView;

加载下一页后,如果它是最后一页,只需在表格上将属性设置为nil即可删除页脚。

关于你的snippiet: -cellForRowAtindexPath :(在表视图上)如果单元格不可见则不会返回任何内容。此外,tableView:cellForRowAtIndexPath(数据源版本)将撤消在再次调用该单元格时可能执行的操作。 将所有单元格修改代码放在数据源中,并在需要更改时在表格上调用相应的重新加载单元格方法。