如何设置在截面tableview上选择的单元格的背景颜色

时间:2017-05-19 00:51:20

标签: ios swift uitableview swift3 uicollectionviewcell

如何设置在节表视图中选择的单元格的背景颜色

每个部分或类型都应该只有一个选定的单元格enter image description here

查看图片描述PLZ

我知道如何在表视图中选择单个单元格,但在这里我希望每个部分只有一个选择单元格

这是我的代码

var sections = [
    Sections(genre: " Animation",
            movies: ["The Lion King", "The Incredibles"],
            expanded: false),
    Sections(genre: " Superhero",
            movies: ["Guardians of the Galaxy", "The Flash", "The Avengers", "The Dark Knight"],
            expanded: false),
    Sections(genre:" Horror",
            movies: ["The Walking Dead", "Insidious", "Conjuring"],
            expanded: false)
]


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func numberOfSections(in tableView: UITableView) -> Int {
    return sections.count
}


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return sections[section].movies.count
}

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 44
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if(sections[indexPath.section].expanded){
        return 44
    }else{
        return 0
    }
}

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return 2
}

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let header = ExpandableHeaderView()
    header.customInit(title: sections[section].genre, section: section, delegate: self)
    return header
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "labelCell")!
    cell.textLabel?.text = sections[indexPath.section].movies[indexPath.row]

    return cell
}

////////////
 func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool {
    return true
}

 func tableView(_ tableView: UITableView, didHighlightRowAt indexPath: IndexPath) {
    let cell = tableView.cellForRow(at: indexPath)
    //let cell = tableView.dequeueReusableCell(withIdentifier: "labelCell")!
    cell?.contentView.backgroundColor = UIColor.red
    //cell?.backgroundColor = UIColor.red

}

 func tableView(_ tableView: UITableView, didUnhighlightRowAt indexPath: IndexPath) {
    let cell = tableView.cellForRow(at: indexPath)
    //let cell = tableView.dequeueReusableCell(withIdentifier: "labelCell")!
    cell?.contentView.backgroundColor = UIColor.white
    //cell?.backgroundColor = UIColor.blue
}

////////////

func toggleSection(header: ExpandableHeaderView, section: Int) {

    sections[section].expanded = !sections[section].expanded
    tableView.beginUpdates()

    for i in 0 ..< sections[section].movies.count{
        tableView.reloadRows(at: [IndexPath(row: i , section: section)], with: .automatic)

    }
    tableView.endUpdates()
}

1 个答案:

答案 0 :(得分:0)

您可以完全使用表视图提供的委托功能:

func tableView(UITableView,didSelectRowAt:IndexPath) 中,您可以检查已选择的部分和行。您还需要检查对此返回的 var indexPathsForSelectedRows:[IndexPath]? 数组的常量检查。

现在你有了。目前的选择b。选择列表, 您可以根据需要继续删除/添加数据到最终数组中。

因此,在您的情况下,在 func tableView(UITableView,didSelectRowAt:IndexPath) 中,您将检查 indexPathsForSelectedRows 已经删除了部分+行数。如果是,则只需使用 tableView:UITableView,didHighlightRowAt indexPath:IndexPath) 中的突出显示,然后相应地更改存储所选电影列表的数组。如果不是简单地添加它。