繁体   English   中英

快速切换UITableView中的自定义单元格

[英]Switching Custom Cells in UITableView in swift

我想要实现的是,当点击UITableview中的某个单元格时,它将展开并显示自定义cell1,其他单元格将保留为自定义cell2。 到目前为止,我实现的是扩展单元格,但是自定义单元格不会改变。
经过初步调查,我认为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)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM