【发布时间】:2018-10-08 04:35:25
【问题描述】:
我有一个带有两个视图的标签栏:
- 表格视图
- 视图控制器添加数据
然后我有一个数组,它将使用新内容从视图控制器更新(例如,只需附加新字符串)。
这个数组填充表格视图。 现在,当应用程序启动时,表格视图显示所有数组内容,但是当我通过选项卡栏移动到视图控制器时,将内容添加到数组并通过选项卡栏移回表格视图,我无法更新表格视图以便它从数组中提取新内容。
我尝试在viewDidAppear 和viewDidLoad 中都使用tableview.reloadData(),但是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
}
【问题讨论】:
-
试试
viewWillAppear() -
您可以使用数据源的
didSet属性观察器重新加载您的tableView,但在您的情况下,这里可能会有额外的问题。如何更新另一个ViewController中的数据源? SwiftArrays 是structs 所以它们是值类型。如果更新数组,则必须将其映射回来。现在根据您的设计,我们将看看需要做什么。所以分享与此相关的代码。 -
viewWillAppear()有效,但仅在将内容添加到数组之后才起作用。基本上,tableview 必须出现两次才能重新加载所有内容。 - 我已经添加了tableview数据源代码。 -
标签栏没有再次加载 viewController,这就是为什么 viewDidLoad 和 viewDidAppear 不起作用。
-
@RjC 不是您在设置数组之前要求重新加载吗?
标签: ios arrays swift tableview