在来回导航时清理旧的UITableViewCells

时间:2016-09-03 07:46:40

标签: ios swift uitableview

我有两个UITableViewController,我使用导航控制器从视图#2返回到视图#1。

在第一个视图中,我从UIPickerView中选择一些值,然后通过按钮触摸它将转到第二个视图,第二个视图根据视图#1中的UIPicker选择显示一些单元格,当我回到第一个视图并更改UiPicker的选择并按下按钮转到第二个视图时,我的问题就出现了,我会在那里找到旧的单元格,直到我的视图#2重新加载新数据在这个功能里面

override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
       self.tableView.reloadData()
    }

我尝试从所有数组中删除数据并使用空数据再次重新加载,尝试删除旧的单元格,如下所示:

 override func viewWillDisappear(animated: Bool) {
        super.viewWillDisappear(animated)
        arra1=[]
        arra2=[]
        self.tableView.reloadData()
    }

这里是我的代码,它将数据从视图#1传递到视图#2:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {

    if (segue.identifier == "MySegue") {

        let destinationVC:onCallEmployee = segue.destinationViewController as! onCallEmployee


        if self.selectedDeptIndex != 0 {
        destinationVC.previewsViewData.append(String(self.selectedDeptIndex))
        }
        if self.teamsIdByName[selectedTeamName] != nil{
        destinationVC.previewsViewData.append(self.teamsIdByName[selectedTeamName]!)
        }
        if self.servicesIdByName[selectedServiceName] != nil {
        destinationVC.previewsViewData.append(self.servicesIdByName[selectedServiceName]!)
        }

    }
}

在返回查看#1之前,有没有办法清理视图#2?

3 个答案:

答案 0 :(得分:1)

而不是在

中重新加载你的表格
override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
   self.tableView.reloadData()
}

中执行此操作
override func viewWillAppear(_ animated: Bool) { {
    super.viewWillAppear(animated)
   self.tableView.reloadData()
}

答案 1 :(得分:1)

UITableViewCells中陈旧数据的问题通常表明您需要在单元格中正确实施prepareForReuse以完全清除旧单元格数据。

func prepareForReuse() {
    myTextCell.text = ""
}

prepareForReuse将在从UITableView.dequeueCell...

返回回收的单元格之前调用

答案 2 :(得分:1)

使用此:

dispatch_async(dispatch_get_main_queue(), {
                self.tableView.reloadData()
            })

而不是:

self.tableView.reloadData()