任何人都可以看到为什么我无法将tableView单元格的背景颜色属性设置为我在ViewDidLoad()
中创建的数组中的颜色?我的self.tableView.reloadData()
方法中也有viewDidAppear()
。让我知道。
override func viewDidLoad() {
super.viewDidLoad()
colorArray += [UIColor.whiteColor(), UIColor.blackColor(), UIColor.greenColor(), UIColor.yellowColor(), UIColor.redColor(), UIColor.purpleColor(), UIColor.orangeColor(), UIColor.blueColor(), UIColor.brownColor(), UIColor.darkGrayColor(), UIColor.lightGrayColor(), UIColor.grayColor(), UIColor.cyanColor(), UIColor.magentaColor(), UIColor.clearColor()]
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
for color in colorArray {
cell.backgroundColor = color
}
return cell
}
答案 0 :(得分:1)
您正在重复设置单元格的颜色。
每次表视图要加载新单元格时,它都会调用其数据源“tableView(:cellForViewAtIndexPath:)
方法”。
在此方法的实现中,循环遍历数组并将单元格的颜色设置为数组的每个项目。首先它将是白色,然后是黑色,然后是绿色......最后它被设置为clearColor
,这是透明的。
每次调用该方法时,您的单元格颜色都将设置为透明。好难过!
通过查看您的代码,我认为您想要的是将第一个单元格的颜色设置为白色,第二个单元格设置为黑色,第三个单元格设置为绿色等等。
您应该知道,每次调用tableView(:cellForRowAtIndexPath:)
时,它都会为您提供一个indexPath
参数,告诉您它想要哪个单元格。您只需要使用它来实现您的方法:
// replace your for loop with this
cell.backgroundColor = colorArray[indexPath.row]
这样,当它想要第一个单元格时,将单元格设置为第一种颜色。当它想要第二个单元格时,将单元格设置为第二种颜色等。
另一方面,如果你想从colorArray
中随机选择,那么每次加载表格视图时单元格都会不同,你只需要生成一个随机数并调用{{{1}的下标。 1}}用这个号码:
colorArray
第1行生成0到// replace your for loop with this
let randomNumber = arc4random_uniform(UInt32(colorArray.count)) // line 1
cell.backgroundColor = colorArray[randomNumber] // line 2
之间的随机数。第2行只是将单元格的颜色设置为colorArray.count
的索引处的颜色!
直截了当,对吧?
编辑:有关colorArray
你一定想知道这个arc4random_uniform
函数在这里做了什么。
arc4random_uniform
返回0(包括)和参数(不包括)之间的随机数(均匀分布)。换句话说,arc4random_uniform
将返回0,1,2,3,4但不返回5.
该函数采用arc4random_uniform(5)
类型的参数,因此我无法直接传入UInt32
。
答案 1 :(得分:0)
设置单元格的随机背景。工作守则。这里arc4random_uniform()
随机数0到colorArray.count。
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
cell.backgroundColor = colorArray[arc4random_uniform(colorArray.count)]
return cell
}
答案 2 :(得分:0)
这将在每次循环中的最后一次UIColor时设置,
for color in colorArray {
cell.backgroundColor = color
}
所以,你需要通过indexPath.row(或section)得到它:
cell.backgroundColor = colorArray[indexPath.row]
或者像这样随机获取:
let randomInt = Int(rand()) % array.count
cell.backgroundColor = colorArray[randomInt]
答案 3 :(得分:0)
试试这段代码,
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
cell.backgroundColor = self.colors[indexPath.row % self.colors.count]
return cell
}
希望它有用
答案 4 :(得分:0)
这不起作用,因为每个单元格都会调用一次tableView(cellForRowAtIndexPath)。
现在发生的事情是你的cell.backgroundColor被设置为第一种颜色,然后是第二种颜色,等等。所以backgroundColor总是colorArray中最后一个元素的颜色。
使用此代替for-in循环:
cell.backgroundColor = colorArray[indexPath.row]
或
如果tableView中的单元格数多于数组中的颜色,请使用: (当colorArray.count
时,这将再次从0开始override func viewDidLoad() {
super.viewDidLoad()
colorArray += [UIColor.whiteColor(), UIColor.blackColor(), UIColor.greenColor(), UIColor.yellowColor(), UIColor.redColor(), UIColor.purpleColor(), UIColor.orangeColor(), UIColor.blueColor(), UIColor.brownColor(), UIColor.darkGrayColor(), UIColor.lightGrayColor(), UIColor.grayColor(), UIColor.cyanColor(), UIColor.magentaColor(), UIColor.clearColor()]
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
let cycle = i / colorArray.count
let colorIndex = i - (cycle * colorArray.count)
cell.backgroundColor = colorArray[colorIndex]
return cell
}