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

时间:2017-09-15 14:13:39

标签: ios swift uitableview

我有一个有一些单元格的UITableView。那些单元格有数字,我总计所有这些数字,然后显示总数(grandTotal)。

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。

我的ViewController类中创建了grandTotal var。

****编辑****

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

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

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

再次看来,每次调用prepareForReuse函数时,我都能找到一种方法将grandTotal设置为0,这可能有效。我只是不确定如何在ViewController

中访问该var

我试过这样的事情:

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而不是引用已存在的VC。

1 个答案:

答案 0 :(得分:0)

很难从示例代码中了解到底发生了什么。

当一个单元格出列时#34;取下View"它是"再循环"。向上滑动时,正在发生的事情是在cellForRowAt ... func中配置了回收的单元格。

从显示的代码中,对于此示例,您可以计算" Grand Total"通过跟踪最大的" IndexPath"在表格视图

onclick()

max为0时类init的var