Color alternate UITableViewCell in a UITableView?

可紊 提交于 2020-01-23 02:28:39

问题


I was trying to color alternate tableCell in a Table View using this link to color cell with this code:

func colorForIndex(index: Int) -> UIColor 
{

    let itemCount = stnRepos.count - 1
    let color = (CGFloat(index) / CGFloat(itemCount)) * 0.6
    return UIColor(red: 0.80, green: color, blue: 0.0, alpha: 1.0)
}

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell,
    forRowAtIndexPath indexPath: NSIndexPath) 
{
        var count = stnRepos.count
        for (var i = 0; i<=count; i++)
        {
            if (i % 2 == 0)
            {
                cell.backgroundColor = colorForIndex(indexPath.row)
                println(i)
            }
        }
}

but ended up coloring all the cell as shown in the link.


回答1:


I am not sure if I understand what you are trying to do but, the code bellow will just color (using your function) the even cell and paint in white the odd ones

func colorForIndex(index: Int) -> UIColor 
{
    let itemCount = stnRepos.count - 1
    let color = (CGFloat(index) / CGFloat(itemCount)) * 0.6
    return UIColor(red: 0.80, green: color, blue: 0.0, alpha: 1.0)
}

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell,
    forRowAtIndexPath indexPath: NSIndexPath) 
{        
    if (indexPath.row % 2 == 0)
    {
        cell.backgroundColor = colorForIndex(indexPath.row)
    } else {
        cell.backgroundColor = UIColor.whiteColor()()
    }
}

ps, the code does not have any the dequeuing and the need and grid from the cells just exemplify the logic to paint the even cell while scaping the odd ones. I hope that helps you




回答2:


Just to be sure...

Are you trying to style your tableview so that odd rows have one background color and even rows have another?

If that is the case, then perhaps this could help you:

Change color of alternate row in UITableView for iPhone SDK

Regarding your code and why it behaves as it does...

- tableView:willDisplayCell:forTableColumn:row:

gets called once for each row in your tableview, just before it is about to be displayed.

In each of these calls you loop through your entire array, and if the current value of i is even, you color the background of your table cell, meaning that when i is 0, you color your background, when i is 2 you do the same, and you do this for each row...this is probably not what you're interested in :-)

As Peter Tutervai suggests, you should check if tableColumn is odd or even and act on that




回答3:


The problem with your code is that you have a single cell which you are coloring stnRepos.count times. You should change your code to something like this:

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell,
    forRowAtIndexPath indexPath: NSIndexPath) 
{
    if (indexPath.row % 2 == 0)
    {
        cell.backgroundColor = colorForIndex(indexPath.row)
    }
    else
    {
        cell.backgroundColor = UIColor.whiteColor()
    }
}

Edit: Added an else case as mentioned by @IcaroNZ to keep the expected behavior even if cells are dequeued




回答4:


func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell,
    forRowAtIndexPath indexPath: NSIndexPath) 
   {        
 if (indexPath.row % 2 == 0)
 {
     cell.backgroundColor = UIColor.gray
 } else {
    cell.backgroundColor = UIColor.white
 }

}




回答5:


try changing

cell.backgroundColor = colorForIndex(indexPath.row)

To

cell.contentView.backgroundColor = colorForIndex(indexPath.row)


来源:https://stackoverflow.com/questions/30505330/color-alternate-uitableviewcell-in-a-uitableview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!