UITableView 中的颜色替代 UITableViewCell?
Posted
技术标签:
【中文标题】UITableView 中的颜色替代 UITableViewCell?【英文标题】:Color alternate UITableViewCell in a UITableView? 【发布时间】:2015-05-28 11:30:24 【问题描述】:我试图在表格视图中使用 link to color cell 和以下代码为备用 tableCell 着色:
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)
但最终如链接所示为所有单元格着色。
【问题讨论】:
很明显。你的数是多少? for 循环将从 0 循环到 count。即使一旦它进入,如果单元格将被着色。你需要检查逻辑。 stnRepos 是我的数组,我将数组的长度分配给 count 变量..!! 【参考方案1】:我不确定我是否理解您要执行的操作,但是下面的代码只会(使用您的函数)为偶数单元格着色,并将奇数单元格涂成白色
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,代码没有任何出队,并且需要单元格中的网格只是举例说明了绘制偶数单元格同时避开奇数单元格的逻辑。希望对你有帮助
【讨论】:
谢谢这也有效..!!我只是在 else 部分添加了一些其他颜色,现在看起来好多了..!! @IrshadQureshi 好消息!祝你的应用好运!【参考方案2】:只是为了确定......
您是否尝试设置表格视图的样式,以使奇数行具有一种背景颜色,而偶数行具有另一种背景颜色?
如果是这样,那么也许这可以帮助你:
Change color of alternate row in UITableView for iPhone SDK
关于您的代码及其行为方式的原因...
- tableView:willDisplayCell:forTableColumn:row:
在表格视图中的每一行被调用一次,就在它即将显示之前。
在每个调用中,您循环遍历整个数组,如果 i 的当前值为偶数,则为表格单元格的背景着色,这意味着当 i 为 0 时,您为背景着色,当 i 为 2 时你也这样做,你对每一行都这样做......这可能不是你感兴趣的:-)
正如 Peter Tutervai 建议的那样,您应该检查 tableColumn 是奇数还是偶数并采取行动
【讨论】:
【参考方案3】:你的代码的问题是你有一个单元格,你正在为stnRepos.count
次着色。你应该把你的代码改成这样:
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()
编辑:添加了@IcaroNZ 提到的else
案例,即使单元格出列也能保持预期的行为
【讨论】:
太棒了..!!!工作得很好...!!!得到了我需要的东西……!!!谢谢...!!!我今天已经完成了我的所有投票,但明天我肯定会支持这个答案......!! @IrshadQureshi 不要忘记,如果要使单元格出列,则需要从 if 语句中重新绘制单元格,因为可重用单元格上缓存了旧设置。【参考方案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】:尝试改变
cell.backgroundColor = colorForIndex(indexPath.row)
到
cell.contentView.backgroundColor = colorForIndex(indexPath.row)
【讨论】:
以上是关于UITableView 中的颜色替代 UITableViewCell?的主要内容,如果未能解决你的问题,请参考以下文章
从自定义单元格返回 NSIndexPath ? (UITableView)
从 UITableView 的子类访问 UIScrollViewDelegate
UITableView, setContentOffset 动画:NO 不会在 iPad 上滚动