如何计算 UITableView 单元格中的值的总和?
Posted
技术标签:
【中文标题】如何计算 UITableView 单元格中的值的总和?【英文标题】:How do I compute total of values in UITableView cells? 【发布时间】:2015-09-19 07:14:32 【问题描述】:我正在使用 NSFetchedResultsController
和 UITableView
。我有一个保存到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 的自定义单元格中获取滑块的值?
核心数据:如何显示 fetchrequest 的结果以计算表格视图单元格中的值
如何在 UITableView 单元格中添加标签和图像视图的数量