Swift:每次tableview出现时如何重新加载新内容(例如数组)?

时间:2018-04-27 10:35:47

标签: ios arrays swift tableview

我有一个包含两个视图的标签栏:

  • tablview
  • 查看控制器以添加数据

然后我有一个数组,它将使用新内容从视图控制器更新(例如,只需附加新字符串)。

此数组填充表视图。 现在当应用程序启动时,表视图显示所有数组内容,但是当我通过选项卡栏移动到视图控制器时,将内容添加到数组并通过选项卡栏移回到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
    }

1 个答案:

答案 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就会重新加载。