在 swift 中切换 UITableView 中的自定义单元格

Switching Custom Cells in UITableView in swift

我想要实现的是,当点击 UITableview 中的单元格时,它将展开并显示自定义单元格 1,其他单元格将保留自定义单元格 2。 到目前为止我实现的是扩展单元格,但自定义单元格不会改变。
经过初步调查,我认为 currentRow 值没有改变。但后来我意识到,如果它不改变,该行就不会扩展。谢谢您的帮助。
代码如下:

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    var currentRow = 0

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        if indexPath.row == currentRow {
            let cell:selectedWeatherViewCell = self.weatherCityTable.dequeueReusableCellWithIdentifier("selectedWeatherCell") as! selectedWeatherViewCell
            cell.selectedCityLabels.text = city[indexPath.row]
            cell.selectedTempLabels.text = tempertureF[indexPath.row]
            cell.backgroundColor = UIColor.redColor()
            return cell
        } else {
            let cell:cityWeatherViewCell = self.weatherCityTable.dequeueReusableCellWithIdentifier("cityWeatherViewCell") as! cityWeatherViewCell
            cell.cityLabels.text = city[indexPath.row]
            cell.tempLabels.text = tempertureF[indexPath.row]
            cell.backgroundColor = UIColor.orangeColor()
            return cell
        }
    }

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        let selectedRowIndex = indexPath
        currentRow = selectedRowIndex.row

        tableView.beginUpdates()
        tableView.endUpdates()
    }

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        if indexPath.row == currentRow {
            return 260
        } else {
            return 100
        }
    }

}

您需要重新加载受影响的行才能更改单元格类型 -

var currentRow:Int?

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    var reloadRows=[NSIndexPath]()
    if self.currentRow != nil && indexPath.row != self.currentRow! {
        reloadRows.append(NSIndexPath(forRow: self.currentRow!, inSection: indexPath.section))
    }
    self.currentRow=indexPath.row
    reloadRows.append(NSIndexPath(forRow: self.currentRow!, inSection: indexPath.section))
    tableView.reloadRowsAtIndexPaths(reloadRows, withRowAnimation: UITableViewRowAnimation.Automatic)
    tableView.deselectRowAtIndexPath(indexPath, animated: true)
}