如何计算 UITableView 单元格中的值的总和?

Posted

技术标签:

【中文标题】如何计算 UITableView 单元格中的值的总和?【英文标题】:How do I compute total of values in UITableView cells? 【发布时间】:2015-09-19 07:14:32 【问题描述】:

我正在使用 NSFetchedResultsControllerUITableView。我有一个保存到CoreData 的“费用”列表。这和往常一样。 NSFetchedResultsController 处理所有事情。

每个Expense 实体都有一个.amount 值(双精度)。

在表格视图的顶部有一个显示totalDebt 的标签。 totalDebt 就是每笔费用加在一起的金额(可以是正数、负数或零)。

该应用可让您添加或删除项目(如单元格,如实体)。

我应该如何计算totalDebtLabel 的值?

我尝试将refreshTotalDebtLabel() 放入cellForRowAtIndexPath,但每次重新加载表格时都会计算每个单元格,甚至是已经计算过的单元格。 我尝试了其他解决方案,但似乎都失败了。

【问题讨论】:

【参考方案1】:

这样做的方法是创建一个refreshLabel 方法,以便在数据更改时调用。您可以通过各种方式捕捉到它,例如在NSFetchedResultsControllerDelegate 方法中,或者当文本字段或编辑控制器返回时。

在刷新方法中,利用键值编码 (KVC) 使其变得非常简单。

let sum = fetchedResultsController.fetchedObjects.valueForKeyPath("@sum.amount") as! Double
// populate the label with the sum

如果您在托管对象子类中使用原语(例如Double),您可能需要使用NSNumber 进行重构,这可以保证工作并且还可以可靠地保存您的Double 值。 (在这种情况下使用 ...as! NSNumber)。

【讨论】:

【参考方案2】:

您不能在表格方法中执行此操作。您必须计算cellForRowAtIndexPath 之外的totalDebt。例如,在您获取费用数组后,您可以使用循环计算totalDebt 并将其设置在标签中。

func refreshTotalDebtLabel()

    let expenses = NSArray() //fetched from core data
    let totalDebt : CGFloat = 0

    expenses.enumerateObjectsUsingBlock  (expenseObj, index, stop) -> Void in
        totalDebt += expenseObj.amount
    

    print("Total Debt = %f", totalDebt)

    self.totalDebtLabel.text = String("$ %0.2f", totalDebt)

【讨论】:

以上是关于如何计算 UITableView 单元格中的值的总和?的主要内容,如果未能解决你的问题,请参考以下文章

Swift:如何在动态 UITableView 的自定义单元格中获取滑块的值?

UITableView 单元格中的动态形状(Swift)

核心数据:如何显示 fetchrequest 的结果以计算表格视图单元格中的值

如何在 UITableView 单元格中添加标签和图像视图的数量

如何使自定义单元格中的 UILabel 显示保存在 UITableView 中的更改

如何获取 UITableView 单元格中的 UIButton 的绝对 x,y