使用prepareForReuse函数从UTRableCell类中的ViewController中重置var

问题描述:

我有一个UITableView有一些单元格。这些单元格有数字,我将所有这些数字加起来然后显示总数(grandTotal)。使用prepareForReuse函数从UTRableCell类中的ViewController中重置var

override func viewWillAppear(_ animated: Bool) { 
     grandTotal = 0.00 
} 

这是应用程序的简化版本,我使用CoreData来存储值。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     grandTotal! += grandTotal + 100 
} 

每次调用cellForRowAt时,grandTotal不会重置为0.00的问题。我有一个自定义的UITableViewCell这个功能。

override func prepareForReuse() { 
    print("recalculate totals!!!!!!!") 
} 

的UITableView的加载后,并正确显示所有数据,如果用户刷卡时,它触发cellForRowAt功能,然后重新计算grandTotal,而不是从0.00开始,但何总为后加载tableView。

我想在perpareForReuse函数中将grandTotal var设置回0.00,但不确定如何再次访问自定义单元类中的grandTotal var。

grandTotal var是在我的ViewController类中创建的。

****编辑****

我有一个跟踪贷款的应用程序。所以你创建了一个你想添加到你的列表中的人。该人可以拥有多个贷款。有些是你借的钱(正数),为什么别人是你借的钱(负数)。 TableView显示您应用中的所有人员。每个单元格还将每个人的所有贷款累加起来,并显示该人的正数或负数。我想要做的是将每个人的所有总数加起来,并显示为总计。我得到了这个工作,但是如果我在桌面上向上或向下滑动,它会重新计算我的总计,而不是从0开始,它使用当前的数字。

似乎有人建议我不应该在cellForRowAt函数中进行计算,我只是不确定如何去做,因为我使用单元格indexPath将人员数据提取出来的CoreData。

let person = fetchedResultsController.fetchedObjects![indexPath.row] 

又好像如果我能想出一个办法,给每个prepareForReuse func被调用时可能的工作设置grandTotal回0。我只是不知道如何访问的ViewController

我想是这样的内部的变种:

let viewController:ViewController = ViewController(nibName: nil, bundle: nil) 
    print("\(String(describing: viewController.oweTotal)) owe total from perpare") --> nil 
    print("\(String(describing: viewController.owedTotal)) owed total from perpare") --> nil 

但我觉得我只是创建一个新的VC,而不是引用已经存在的一个。

+0

正因为这个原因,你不应该在'cellForRowAt'中进行计算。您应该将准备好的数据传递给您的表格视图,并根据您的数据源进行计算。 –

+0

您的“总计”是否仅仅是当前在屏幕上可见的单元格的总数?正如David在评论中所说的,你不应该在cellForRowAt中进行计算。表格视图可能会多次请求同一个单元格,请求单元格不按顺序等。如果您告诉我们您要做什么,我们可能会提供关于如何完成它的建议。 –

+0

我将编辑问题以提供更多详细信息。 – icekomo

从示例代码中很难判断这里究竟发生了什么。

当一个单元出列“取下视图”时,它被“回收”。当你向上滑动时,正在cellForRowAt ... func中配置循环单元。

从代码所示,在这个例子中,你可以通过在表视图跟踪最大的“IndexPath”的计算“总计”

max = max(max,indexPath.row) 

,最大是在类初始化一个变种0