Ios 创建后快速刷新TableView
在swift中,我有两个视图控制器。一种是tableView,显示数组中的数据。在函数调用中,另一个视图控制器调用tableView,并为tableView传递带有新数据的参数。即使在我更新数组Ios 创建后快速刷新TableView,ios,swift,uitableview,swift2,Ios,Swift,Uitableview,Swift2,在swift中,我有两个视图控制器。一种是tableView,显示数组中的数据。在函数调用中,另一个视图控制器调用tableView,并为tableView传递带有新数据的参数。即使在我更新数组bucket时,从TableView中获取数据的位置也不会更新。如何让程序重新加载其数据 表格视图 import Foundation import UIKit class BucketTableViewController: UITableViewController { var buckets
bucket
时,从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)
}
我想为您推荐与我在这里的回答相同的东西:尝试使用
tableView?.beginUpdates()
和tableView?.endUpdates()
——我发现tableView?.reloadData()
有时会对数据源更新很挑剔
否则,请确保正在对BucketTableViewController()
的正确实例调用updateBuckets()
;看起来您在viewDidLoad()中实例化了一个新实例,而不是更改现有实例的内容(您可能会这样做)。这一行就在这里:
let buckets = BucketTableViewController()
您正在创建一个全新的
BucketTableViewController
实例并更新其bucket。这不会导致现有的BucketTableViewController
更新。您需要弄清楚如何获取对现有视图控制器的引用并进行更新。您是否检查过,在调用updateBuckets时tableView已经存在?@freytag我只是将updateBuckets放入延迟方法中,这并没有改变结果。因此,是的,tableView已经创建完毕。如果您检查了tableView的委托和数据源是否为nil?reloadData()
保证工作正常。如果它不起作用,有些东西就严重损坏了。如果没有其他问题,是的,它会一直起作用——我同意,这个案例似乎很简单。错误可能是OP在BucketTableViewController()的错误实例上调用了updateBuckets()。@KevinZhang我在类中创建了BucketTableViewController()的实例,并在调用中引用该实例。如何在不创建新类的情况下访问tableview类?@KevinZhang如果删除BucketTableViewController(),则无法调用updateBuckets。[我想]我需要先实例化一个变量,在哪里显示表视图控制器?在显示表视图的视图控制器中,您应该存储一个跟踪表视图控制器的公共变量,然后修改该实例。也许您可以提供一些帮助,帮助“弄清楚如何获取对现有视图控制器的引用”