我有一个带有两个视图的选项卡栏:
然后我有一个数组,它将从视图控制器更新为新内容(例如,仅附加新字符串)。
该数组填充表视图。
现在,当应用程序启动时,表视图显示所有数组内容,但是当我通过选项卡栏移动到视图控制器、将内容添加到数组并通过选项卡栏移回表视图时,我无法更新表视图以便它从数组中提取新内容。
我尝试使用tableview.reloadData()
同时viewDidAppear
and viewDidLoad
,但 tableview 不会重新加载,并且仍然显示应用程序启动时最初加载的数据,但不显示新内容。
override func viewWillAppear(_ animated: Bool) {
tableView.reloadData()
weightArray = UserDefaults.standard.array(forKey: "favorites") as! [String]
}
这就是我填充表格视图的方式:
// 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
}
Your 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
将重新加载。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)