如何为tableview的最后一个可见单元格创建不同的视图

时间:2014-06-09 07:37:22

标签: ios iphone objective-c uitableview

我想显示具有不同背景颜色的最后一个可见单元格(比如绿色)。 我正在使用这段代码,直到我向上/向下滚动它才有效。当我向上/向下滚动时,它给出了许多具有绿色背景的单元格。 (我想这是由于“dequeueReusableCellWithIdentifier”而发生的)。 任何人都可以帮助我解决我做错的地方或者最好的方法。

NSArray* indexPaths = [tableView indexPathsForVisibleRows];
if (indexPath.row==[indexPaths count]-1)
{
    UIView *v=[[UIView alloc]initWithFrame:cell.bounds];
    v.backgroundColor=[UIColor greenColor];
    cell.backgroundView=v;
}

提前致谢。

3 个答案:

答案 0 :(得分:2)

首先,你不应该在cellForRowAtIndexPath中分配任何东西 - 这对性能不利。您应该只配置每个单元格已存在的视图和控件。由于单元格被重复使用,因此您添加背景视图的单元格也将被重复使用...及其背景视图。

在您的情况下,您可能只想设置:

if (lastCell)
    cell.contentView.backgroundColor = [UIColor greenColor];
else
    cell.contentView.backgroundColor = [UIColor clearColor]; //or whatever color

contentView已经是每个UITableViewCell免费提供的视图,因此只需将其用于背景色。苹果可能打算将它用于这种情况,等等。

答案 1 :(得分:0)

您应该在测试之前忽略背景视图。

cell.backgroundView = nil;

if (indexPath.row==[indexPaths count]-1)
{
    UIView *v=[[UIView alloc]initWithFrame:cell.bounds];
    v.backgroundColor=[UIColor greenColor];
    cell.backgroundView=v;
}

答案 2 :(得分:0)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    if (indexPath.row==[yourtableviewarray count]-1)
    {
        UIView *v=[[UIView alloc]initWithFrame:cell.bounds];
        v.backgroundColor=[UIColor greenColor];
        cell.backgroundView=v;
    }

}