1

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

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

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

}
4

4 回答 4

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];

更多信息在这里

于 2012-07-26T20:01:12.630 回答
1

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

于 2012-07-26T19:57:56.043 回答
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

}
于 2012-07-26T19:58:36.260 回答
0

如果您的负载更多位于表格的最底部,请将其实现为表格页脚。您不会用额外的索引搞砸您的数据源,并且您将无需轻量级来修改它/调整它的大小,因为您认为合适。

类似于:tableView.tableFooterView = theFooterView;

加载下一页后,如果是最后一页,只需通过在 table 上将属性设置为 nil 来删除页脚。

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

于 2012-07-27T08:20:12.940 回答