ios - 为什么我不能将颜色数组中的颜色随机设置到 tableViewCells?

标签 ios arrays swift uitableview uicolor

谁能看出为什么我不能将 tableView 单元格的背景颜色属性设置为我在 ViewDidLoad() 中创建的数组中的颜色?我的 viewDidAppear() 方法中也有一个 self.tableView.reloadData()。让我知道。

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
}

最佳答案

您正在重复设置单元格的颜色。

每次 TableView 想要加载一个新单元格时,它都会调用其数据源的 tableView(:cellForViewAtIndexPath:) 方法。

在该方法的实现中,您遍历数组并将单元格的颜色设置为数组的每个项目。所以首先它将是白色,然后是黑色,然后是绿色...最后它被设置为透明的 clearColor

每次调用该方法时,您的单元格的颜色都将设置为透明。好伤心!

通过查看您的代码,我认为您想要的是将第一个单元格的颜色设置为白色,第二个为黑色,第三个为绿色,等等。

您应该知道,每次调用 tableView(:cellForRowAtIndexPath:) 时,它都会为您提供一个 indexPath 参数,告诉您它需要哪个单元格。您只需要利用它来实现您的方法:

// replace your for loop with this
cell.backgroundColor = colorArray[indexPath.row]

这样,当它需要第一个单元格时,您可以将单元格设置为第一种颜色。当它需要第二个单元格时,您将单元格设置为第二种颜色等。

另一方面,如果您想从 colorArray 中随机选择,这样每次加载表格 View 时单元格都会不同,您只需要生成一个随机数并调用下标具有该数字的 colorArray:

// replace your for loop with this
let randomNumber = arc4random_uniform(UInt32(colorArray.count)) // line 1
cell.backgroundColor = colorArray[randomNumber] // line 2

第 1 行生成一个介于 0 和 colorArray.count 之间的随机数。第 2 行只是将单元格的颜色设置为 colorArray 索引处的颜色!

很简单,对吧?

编辑:更多关于 arc4random_uniform

您一定想知道 arc4random_uniform 函数在这里做什么。

arc4random_uniform 返回一个介于 0(含)和参数(不含)之间的随机数(均匀分布)。换句话说,arc4random_uniform(5) 将返回 0、1、2、3、4 而不是 5。

该函数采用 UInt32 类型的参数,因此我无法直接传入 colorArray.count

关于ios - 为什么我不能将颜色数组中的颜色随机设置到 tableViewCells?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37024723/

相关文章:

ios - Self Sizing CollectionView inside a Self Sizing TableViewCell

objective-c - 横向时复制 UIImageView?

ios - iOS根据另一个数组中的字符串顺序对一个数组进行排序

ios - Swift 自定义 UIViewController 的标签为 nil

c - 循环的执行速度随变量位置而变化

sql - 如何将多个重复行转换为 SQL (Postgres) 中的数组?

swift - Swift 中参数的外部名称

xcode - 在 Swift 中从 PaintCode 访问图像

ios - 快速初始化 UITextField 的子类

c - 将字符串文件读取到字符串数组