如何在一个表格视图中为另一个表格视图行为另一个表格视图行生成相同的随机颜色?

时间:2019-04-04 16:34:19

标签: swift xcode tableview uicolor

在我的应用程序中,我单击一行,然后在其下方展开另一行。我想生成一种随机颜色,当我单击一行时,行背景将变为该颜色,而其下方的展开行将变为相同的颜色。如何使行生成相同的随机颜色?

我创建了一个函数来生成随机颜色,当isOpened设置为true时,我为行调用函数单元格,并且为展开的单元格调用了相同的函数。

path

会生成随机颜色,但展开的行会生成新颜色。

4 个答案:

答案 0 :(得分:2)

您将需要存储生成的随机颜色。每次调用generateRandomColor()时,都会创建一个新的。我要做的是创建颜色到行的字典。

var color: [Int: UIColor?] = [:]

然后在cellForRowAtIndexPath中确定该行是否已经有颜色,如果没有,请计算:

if let color = colors[indexPath.row] {
    cell.backgroundColor = color
} else {
    colors[indexPath.row] = generateRandomColor()
}

然后在didSelectRowForIndexPath中,您可以使用以下方法检索randomColor:

if let color = colors[indexPath.row] {
        // Expand the cell with the new color
}

答案 1 :(得分:0)

插入arter本地函数: 让_color = generateRandomColor() 可以分配该值,即必须具有相同颜色的元素。

答案 2 :(得分:0)

修改部分数据源以包括颜色,如下所示:

struct SectionData {
    let title: String
    var color: UIColor?
}

if indexPath.row == 0 {行之前,添加以下内容

var backgroundColor: UIColor! = self.tableViewData[indexPath.section].color
if backgroundColor == nil {
    backgroundColor = generateRandomColor()
    self.tableViewData[indexPath.section].color = backgroundColor
}
cell1.backgroundColor = backgroundColor

现在删除其他行cell1.backgroundColor = generateRandomColor()

答案 3 :(得分:0)

我已经尝试了所有这些方法,但只找到了一种可以按照我希望的方式工作的方法。

我必须修改我的数据源:

struct cellData {
var opened = Bool()
var title = String()
var sectionData = [String]()
var color: UIColor? = UIColor()

}

var tableViewData = [cellData]()

func generateRandomColor() -> UIColor {
let redValue = CGFloat(drand48())
let greenValue = CGFloat(drand48())
let blueValue = CGFloat(drand48())

let randomColor = UIColor(red: redValue, green: greenValue, blue: blueValue, alpha: 1.0)

return randomColor
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let dataIndex = indexPath.row - 1
    guard let cell1 = tableView.dequeueReusableCell(withIdentifier: "cell1") else {return UITableViewCell()}

    var backgroundColor: UIColor! = tableViewData[indexPath.section].color
    if backgroundColor == nil {
        backgroundColor = generateRandomColor()
        tableViewData[indexPath.section].color = backgroundColor
    }
    cell1.backgroundColor = backgroundColor

    if indexPath.row == 0 {

        if tableViewData[indexPath.section].opened == false {
            tableViewData[indexPath.section].opened = false
            cell1.textLabel?.text = tableViewData[indexPath.section].title
            cell1.textLabel?.numberOfLines = 0
            cell1.textLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping
            cell1.textLabel?.font = UIFont.systemFont(ofSize: 18)
            cell1.backgroundColor = UIColor.clear
            return cell1
        }
        else if tableViewData[indexPath.section].opened == true {
            tableViewData[indexPath.section].opened = true
            cell1.textLabel?.text = tableViewData[indexPath.section].title
            cell1.textLabel?.numberOfLines = 0
            cell1.textLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping
            cell1.textLabel?.font = UIFont.boldSystemFont(ofSize: 25)
            return cell1
        }
        return cell1
    } else {
        cell1.textLabel?.text = tableViewData[indexPath.section].sectionData[dataIndex]
        cell1.textLabel?.numberOfLines = 0
        cell1.textLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping
        cell1.textLabel?.font = UIFont.systemFont(ofSize: 18)
        return cell1
    }
}