Ios 修改按分段控件排序的表视图单元格

Ios 修改按分段控件排序的表视图单元格,ios,swift,uitableview,Ios,Swift,Uitableview,我有一个任务表视图。我在表上方还有一个分段控件,有两个选择,第一个用于显示常规表,另一个用于过滤表的数组,以拾取与当前日期具有相同日期的元素,然后,我将这些新元素添加到一个新数组中,并重新加载表视图,该表视图检查分段控件中选定的按钮是否是第二个按钮,它会将过滤数组的元素作为表的单元格加载。我对单元格有一个操作,因此如果单击它们,您将进入一个视图,在那里您可以更改单元格的颜色。问题就发生在这里。我将单元格的索引路径存储在表中,以确定要编辑的单元格行,但如果选定的分段按钮是第二个按钮,则索引将根据过

我有一个任务表视图。我在表上方还有一个分段控件,有两个选择,第一个用于显示常规表,另一个用于过滤表的数组,以拾取与当前日期具有相同日期的元素,然后,我将这些新元素添加到一个新数组中,并重新加载表视图,该表视图检查分段控件中选定的按钮是否是第二个按钮,它会将过滤数组的元素作为表的单元格加载。我对单元格有一个操作,因此如果单击它们,您将进入一个视图,在那里您可以更改单元格的颜色。问题就发生在这里。我将单元格的索引路径存储在表中,以确定要编辑的单元格行,但如果选定的分段按钮是第二个按钮,则索引将根据过滤表中元素的顺序存储,因此当我完成编辑单元格时,由于正常表和筛选表索引之间存在冲突,因此具有该索引的单元格的颜色将更改,而不是实际单元格的颜色。希望能清楚地解释我的情况,如果不清楚,请向我进一步解释

以下是表格加载代码:

 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()

}

如果加载的表是经过过滤的表,那么假设我要编辑第二个单元格,indexath.row将是1,因此更改颜色的单元格将是表中的第二个单元格,但实际上过滤表中的第二个单元格是非过滤表中的第五个单元格,所以我想在第五个而不是第二个上应用更改,有人知道吗?

问题是您正在保存单元格索引路径,该路径是静态的,不会随着表视图中的更改而更改

您可以通过在模型arr中添加一个将数据馈送到表中的bool属性来轻松解决此问题。名称为shouldChangeColor,并将此属性设置为true。现在,模型数据已更新。在cellForRowAtIndexPath函数中使用此属性可更改单元格颜色


由于单元格是按照您从模型中提供数据的顺序绘制的,这将保证您的第二个单元格在过滤模式下以彩色绘制,第五个单元格在其他选项卡模式下以彩色绘制。

好的,我可以这样做,但问题是,如果您按下单元格,您将进入一个新场景,您可以在其中更改单元格的颜色,并且如上所述,这取决于单元格的索引,因此,我使用了过滤表,选择了第二个单元格,并更改了其颜色。该单元格是非过滤表中的第五个单元格,但当显示非过滤表时,第二个单元格将被编辑。我需要一种方法来根据单元格本身而不是单元格的顺序应用更改,这会导致表单元格之间的冲突。我想这里您看到的是将被点击单元格的索引路径传递给不同的视图控制器,这非常简单。当你点击单元格时,你可以在didSelectRowAtIndex path函数中获得索引路径,你可以在prepareToSegue函数中保存并传递给你的新场景。这与我所做的基本相同,选择过滤表中的某个单元格到下一个场景时,将此索引路径传递到下一个,并根据此索引修改单元格,因此在显示未过滤表时,该索引的单元格将是修改后的单元格,而不是实际的单元格!我以为您正在从同一个视图控制器更改单元格颜色,但看起来您正在从不同的视图控制器更改单元格颜色。我的帖子也会很有魅力。唯一需要确保的是从第二视图控制器更新模型。您可以创建协议并在其中定义方法。然后将第一个视图控制器设置为第二个视图控制器的委托。当您要更改单元格颜色时,请在第一视图控制器上调用该代理。最后,在该委托中,按照我所说的更新模型并重新加载表。它应该适用于您的两个细分市场。Ohhh:/。我就是这么做的,也许你还没明白我的意思。当我在过滤表中编辑该单元格时,我调用函数exist in the same view of the table,ti使用delegation重新加载该表。重新加载进程本身的问题。假设我在表中有以下元素:a-b-c和都是黑色,我有分段控件对元素进行排序和过滤,因此它将显示以c字母开头的元素,所以过滤表中唯一的元素将是c,我按下c,然后转到另一个场景,该场景获取单元格的indexpath并进行更改。。。。