创建后快速刷新TableView

时间:2015-07-07 17:07:39

标签: ios swift uitableview swift2

在swift中我有两个视图控制器。一个是tableView并显示数组中的数据。在函数调用上,另一个视图控制器调用tableView并使用表视图的新数据传递参数。即使我更新数组buckets,其中从TableView获取的数据也不会更新。如何让程序重新加载其数据?

表格视图

import Foundation
import UIKit
class BucketTableViewController: UITableViewController {
    var buckets = ["A", "B", "C"]
    override func viewDidLoad() {
    }
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return buckets.count
    } 
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell
        cell.textLabel?.text = buckets[indexPath.row]
        return cell
    }
    func updateBuckets(newBucket: NSArray) {
        buckets = newBucket as! [String]
        self.tableView?.reloadData()
    } 
}

我可以验证从其他视图控制器调用updateBuckets。

其他视图控制器

    var bigArray = ["M", "A", "R", "C"]

override func viewDidLoad() {
    super.viewDidLoad()
    let buckets = BucketTableViewController()
    buckets.updateBuckets(bigArray)

}

3 个答案:

答案 0 :(得分:5)

尝试使用tableView?.beginUpdates()tableView?.endUpdates() - 我发现tableView?.reloadData()有时会对数据源更新有所了解。

否则,请确保在updateBuckets()的正确实例上调用BucketTableViewController();看起来你在viewDidLoad()中实例化了一个新实例,而不是改变现有实例的内容(正如你可能会做的那样)。

答案 1 :(得分:0)

这一行就在这里:

let buckets = BucketTableViewController()

您正在创建一个全新的BucketTableViewController实例并更新其存储桶。这不会导致现有BucketTableViewController更新。您需要弄清楚如何获取对现有视图控制器的引用并更改它。

答案 2 :(得分:-1)

我会像在此答案中所做的那样为你推荐同样的事情:Updating a Table View From a Different File - Cannot invoke 'reloadData' with no arguments