具有多个节的UITableView和具有单个单元格选择和多个单元格选择的自定义节头

时间:2019-06-13 09:45:12

标签: ios uitableview swift4

我将UITableView设置为多个部分,第一部分选择了一个选项,第二部分选择了多个选项,因此我希望确切地了解UberEats在选择附加食品和食物类型时发生的情况

我已经完成了单元格行的扩展和关闭,我想更新自定义标题中的标签

var selectedIndexPath: IndexPath?

cellForRowAt

if let inxPath = selectedIndexPath{
            if inxPath.section == 0{
                if inxPath == indexPath{
                    if inxPath.row == indexPath.row && inxPath.section == indexPath.section{
                        cell.radioButtonImageView.image = #imageLiteral(resourceName: "radioCheck")
                    }
                }
            }
            if inxPath.section == 1{
                if inxPath.row == indexPath.row && inxPath.section == indexPath.section{
                    if cell.radioButtonImageView.image == #imageLiteral(resourceName: "IconUnmarked"){
                        cell.radioButtonImageView.image = #imageLiteral(resourceName: "IconMarked")
                    }else if cell.radioButtonImageView.image == #imageLiteral(resourceName: "IconMarked"){
                        cell.radioButtonImageView.image = #imageLiteral(resourceName: "IconUnmarked")
                    }
                }

            }

        }

didSelectRowAt

selectedIndexPath = indexPath
tableView.reloadData()

1 个答案:

答案 0 :(得分:1)

创建一个int以及一个int实例属性数组,以存储选定的行详细信息。

var selectedOfferIndex: Int? // section 0
var selectedItemIndices: [Int] = []//section 1

在cellForRowAt中比较选定的值并更改UI

if section == 0 {
    if indexPath.row == selectedOfferIndex {
        //...
    } else {
        //...
    }
} else {//section 1
    if selectedItemIndices.contains(indexPath.item) {
        //...
    } else {
        //...
    }
}

在didSelectRowAt方法中更新所选值

if section == 0 {
    selectedOfferIndex = indexPath.row
} else {//section 1
    if index = selectedItemIndices.firstIndex(of: indexPath.row) {
        selectedItemIndices.remove(at: index)
    } else {
        selectedItemIndices.append(indexPath.row)
    }
}
tableView.reloadData()