Swift - 以编程方式设置UITableViewCell重置滚动

时间:2016-04-28 15:57:42

标签: ios swift uitableview

所以我选择了以编程方式设置UITableViewCell的布局:

 override func tableView(tableView: UITableView,  didSelectRowAtIndexPath indexPath: NSIndexPath) {
    self.selectedCellIndexPath = indexPath
    var selectedCell = tableView.cellForRowAtIndexPath(indexPath)!
    tableView.beginUpdates()
    tableView.endUpdates()
    var cell:SelectedPatientCell = tableView.dequeueReusableCellWithIdentifier("patient selected", forIndexPath: indexPath) as! SelectedPatientCell
    cell.patientName.text = patients[indexPath.row].fullName
    cell.dob.text = patients[indexPath.row].dob
    ...
    selectedCell = cell
}

当我滚动tableView时,单元格的布局将重置为其在cellForRowAtIndexPath中设置的原始布局。但是,当我在上面的函数中设置它时,高度保持不变。有谁知道如何解决这个问题?

这是一张正在发生的事情的专辑: http://imgur.com/a/OUIMJ

图片1:原始状态

图片2:选择状态(如何保持滚动)

图3:实际发生的事情

2 个答案:

答案 0 :(得分:1)

你应该在

中保持这种状态
 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    if indexPath == self.selectedCellIndexPath {
        var cell:SelectedPatientCell = tableView.dequeueReusableCellWithIdentifier("patient selected", forIndexPath: indexPath) as! SelectedPatientCell
        cell.patientName.text = patients[indexPath.row].fullName  
        cell.dob.text = patients[indexPath.row].dob
        return cell
    }
    let cell = tableView.dequeueReusableCellWithIdentifier("patient selected") as! OriCell
    ...
    return cell
 }

这样,如果滚动tableView,它将不会恢复到原始Cell。 希望很清楚。

答案 1 :(得分:0)

所以我找到了自己的解决方案: 而不是做

    tableView.beginUpdates()
    tableView.endUpdates()

我需要在函数结束时执行此操作:

    tableView.reloadData()

并且解决了问题