[英]Swift Refresh TableView after creation
我有兩個視圖控制器。 一個是tableView,它顯示數組中的數據。 在調用函數時,另一個視圖控制器將調用tableView,並為表視圖傳遞帶有新數據的參數。 即使我更新了從TableView中獲取數據的數組buckets
,也不會更新。 如何獲取程序以重新加載其數據?
表格視圖
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()
BucketTableViewController()
; 好像您在viewDidLoad()中實例化了一個新實例,而不是更改現有實例的內容一樣(可能會這樣做)。
這行就在這里:
let buckets = BucketTableViewController()
您正在創建一個全新的BucketTableViewController
實例並更新其存儲桶。 這不會導致現有的BucketTableViewController
進行更新。 您需要弄清楚如何獲取對現有視圖控制器的引用並進行更新。
我會為您推薦與在此答案中所做的相同的事情: 從其他文件更新表視圖-無法在沒有參數的情況下調用'reloadData'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.