我有一个包含两个视图的标签栏:
然后我有一个数组,它将使用新内容从视图控制器更新(例如,只需附加新字符串)。
此数组填充表视图。 现在当应用程序启动时,表视图显示所有数组内容,但是当我通过选项卡栏移动到视图控制器时,将内容添加到数组并通过选项卡栏移回到tableview,我无法更新tableview这样它就可以从数组中提取新内容。
我尝试在tableview.reloadData()
和viewDidAppear
使用viewDidLoad
,但是tableview没有重新加载,仍会显示最初在应用开始时加载的数据,但不是新内容。
override func viewWillAppear(_ animated: Bool) {
tableView.reloadData()
weightArray = UserDefaults.standard.array(forKey: "favorites") as! [String]
}
这是我填充tableview的方式:
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return weightArray.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellIdentifier = "FavoriteCell"
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath)
let weights = weightArray[indexPath.row]
cell.textLabel?.text = weights
return cell
}
答案 0 :(得分:2)
您的reloadData()
来电是在更新阵列之前。
应该在更新数据源之后:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
weightArray = UserDefaults.standard.array(forKey: "favorites") as! [String]
tableView.reloadData()
}
无论如何,您可以使用数据源对象的didSet
属性观察者。
//your weightArray declaration
var weightArray = [String]() {
didSet {
tableView.reloadData()
}
}
然后你可以这样做:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
weightArray = UserDefaults.standard.array(forKey: "favorites") as! [String]
}
这样,只要您更改数组,tableView
就会重新加载。