我有这个TableView
当视图出现时它工作正常,当我添加一行它也可以正常工作,当我添加第二个,第三个,ecc ...行时它开始出现这个问题:
使用固定的点图像和两个中间段构建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) }
}
我每次按下按钮时都尝试重新加载表格,但是相同。怎么了?
答案 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”模式。