我有一个任务表视图。我在表上方还有一个分段控件有两个选择,第一个用于显示常规表,另一个用于过滤表的数组以选择与当前日期具有相同日期的元素然后,我添加这些新元素到新数组并重新加载表视图,检查分段控件中的选定按钮是否是第二个,它将加载已过滤数组的元素作为表的单元格。我对单元格进行了操作,因此如果单击它们,则转到可以更改单元格颜色的视图。这个问题正在发生。我在表中存储单元格的索引路径以确定要编辑哪个单元格(行),但如果所选的分段按钮是第二个,则将根据过滤中元素的顺序存储索引table,所以当我完成单元格的编辑时,由于普通表和过滤的表索引之间的冲突,具有该索引而不是实际单元格的单元格的颜色将被更改。希望清楚到足以解释我的情况,如果不是,请向我提出更多解释。
这是表加载代码:
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete method implementation.
// Return the number of rows in the section.
if sortTableClicked
{
return filteredAchivements.count
}else
{
return achievements.count
}
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("myCell2", forIndexPath: indexPath) as! AchievementsCells
var arr = [achievement]()
if sortTableClicked
{
arr = filteredAchivements
}else
{
arr = achievements
}
cell.name.text = arr[indexPath.row].name
cell.des.text = arr[indexPath.row].des
cell.date.text = "\(arr[indexPath.row].date) : تم إضافته بتاريخ "
cell.backgroundColor = arr[indexPath.row].cellColor
return cell
}
我有这个函数接收从表发送的索引路径,并根据索引路径应用更改。
func applyEdit(color: UIColor, name: String, des: String, index: NSIndexPath) {
taskMgr.editCellDataAtIndex(index, forTable: "achievementsTable", theNewName: name, theNewDes: des, theNewColor: color)
taskMgr.loadData("achievementsTable")
achievements = []
achievements = taskMgr.achievements
tableView.reloadData()
}
如果加载的表是已过滤的表,并且假设我要编辑第二个单元格,则indexpath.row将为1,因此更改后的颜色单元格将是表格中的第二个单元格,但是实际上,过滤表中的第二个单元格是非过滤表格中的第五个单元格,所以我想对第五个单元格应用更改,而不是第二个单元格,是否有人有任何想法?
答案 0 :(得分:0)
问题是您正在保存单元格索引路径,该路径是静态的,并且不会随着表视图中的更改而改变。
您可以通过在模型bool
中再添加一个arr
属性来轻松解决此问题,该属性将数据提供给表格。名称为shouldChangeColor
,并将此属性设置为true
。现在,您的模型数据已更新。在cellForRowAtIndexPath
函数中使用此属性可更改单元格颜色。
由于按照从模型提供数据的顺序绘制单元格,因此可以保证第二个单元格在过滤模式下绘制为彩色,在其他标签模式下绘制为第5单元格。