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

时间:2015-12-02 02:39:10

标签: ios swift uitableview custom-cell

我想要实现的是,当点击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
        }
    }

}

1 个答案:

答案 0 :(得分:1)

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

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)
}