向TableView添加多个单元格的异常行为

时间:2016-02-29 11:37:27

标签: ios xcode uitableview

我有这个TableView

enter image description here

当视图出现时它工作正常,当我添加一行它也可以正常工作,当我添加第二个,第三个,ecc ...行时它开始出现这个问题:

enter image description here(而不是只让细分下来,它会同时显示)

使用固定的点图像和两个中间段构建Segmet:一个向上,一个向下,根据行,我显示一个顶部段,或仅显示底部或两个:

    cell.centralDotIV.image = UIImage(named: "Dot")
    if array.count > 1 {
        if indexPath.row == 0 {
            cell.lowerLineIV.image = UIImage(named: "Line")
        } else if indexPath.row == array.count - 1 {
            cell.upperLineIV.image = UIImage(named: "Line")
        } else {
            cell.upperLineIV.image = UIImage(named: "Line")
            cell.lowerLineIV.image = UIImage(named: "Line")
        }
    }

以下是每次添加单元格按钮时都会运行的代码:

@IBAction func addDateTapped(sender: UIBarButtonItem) {
    array.append(NSDate())

    var i = 0
    var indexArray = [NSIndexPath]()
    for _ in array {
        let index = NSIndexPath(forRow: i, inSection: 0)
        indexArray.append(index)
        i++
    }

    tableView.insertRowsAtIndexPaths([NSIndexPath(forRow: 0, inSection: 0)], withRowAnimation: .Fade)
    if array.count != 1 { tableView.reloadRowsAtIndexPaths(indexArray, withRowAnimation: .Fade) }
}

我每次按下按钮时都尝试重新加载表格,但是相同。怎么了?

3 个答案:

答案 0 :(得分:0)

当您的单元格出列时,您没有正确更新它们。您必须取消设置不需要的图像。

cell.centralDotIV.image = UIImage(named: "Dot")
if array.count > 1 {
    if indexPath.row == 0 {
        cell.lowerLineIV.image = UIImage(named: "Line")
        cell.upperLineIV.image = nil
    } else if indexPath.row == array.count - 1 {
        cell.lowerLineIV.image = nil
        cell.upperLineIV.image = UIImage(named: "Line")
    } else {
        cell.upperLineIV.image = UIImage(named: "Line")
        cell.lowerLineIV.image = UIImage(named: "Line")
    }
}

你不应该经常使用image财产。相反,将image设置为UIImage(named: "Line")一次又一次地设置在控制器中:

cell.centralDotIV.image = UIImage(named: "Dot")
if array.count > 1 {
    if indexPath.row == 0 {
        cell.lowerLineIV.hidden = false
        cell.upperLineIV.hidden = true
    } else if indexPath.row == array.count - 1 {
        cell.lowerLineIV.hidden = true
        cell.upperLineIV.hidden = false
    } else {
        cell.upperLineIV.hidden = false
        cell.lowerLineIV.hidden = false
    }
}

您可以分解:

    cell.lowerLineIV.image = UIImage(named: "Linea")
    cell.upperLineIV.image = UIImage(named: "Linea")

    if DataManager.sharedInstance.actualAction.iteration_action!.count > 1 {
        cell.lowerLineIV.hidden = indexPath.row == array.count - 1
        cell.upperLineIV.hidden = indexPath.row == 0
    } else {
        cell.lowerLineIV.hidden = true
        cell.upperLineIV.hidden = true
    }

答案 1 :(得分:0)

@ Matte.Car,好像是array.count!= 1,你正在重新加载表视图的所有行,用于每次插入新记录。那么,您是否可以使用tableView.reloadData()方法,因为它也是如此 其次,你能展示你的CellForRowAtIndexPath()代码。

答案 2 :(得分:0)

表视图单元通常由于性能原因而重复使用。因此,您需要完全配置它们或实现适当的“prepareForReuse”模式。