当 VC 从另一个 VC 返回时,如何清除 UITableVIew 中的所有检查?

Posted

技术标签:

【中文标题】当 VC 从另一个 VC 返回时,如何清除 UITableVIew 中的所有检查?【英文标题】:How do I clear all checks in UITableVIew when VC is returned to from another VC? 【发布时间】:2016-11-30 18:44:21 【问题描述】:

我有一个场景,UITableView 显示联赛中的球员列表。

用户选择两个玩家来比较结果。当用户选择玩家时,会显示一个支票。一旦用户选择了两个用户,就会出现一个新的 VC,显示两个玩家的结果。

在这个 ResultsVC 上,我有一个后退按钮,可以关闭 ResultsVC,并且视图返回到 originalVC。

返回此原始 VC 后,被选中查看的玩家旁边的检查仍然可见。

当这个 VC 返回时如何重置所有检查?

这是我使用 TableView 的原始 VC 的代码:

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 



    let cell = tableView.dequeueReusableCell(withIdentifier: "PersonalStatsTableViewCell", for: indexPath as IndexPath) as! PersonalStatsTableViewCell

    cell.textLabel?.text = self.communityPlayers[indexPath.row]
    cell.textLabel?.font = UIFont(name: "Avenir", size: 12)
    cell.textLabel?.textColor = UIColor.white // set to any colour
    cell.layer.backgroundColor = UIColor.clear.cgColor

    cell.personalStatsInfoButton.tag = indexPath.row
    cell.personalStatsInfoButton.addTarget(self, action: #selector(infoClicked), for: UIControlEvents.touchUpInside)

    cell.selectedBackgroundView?.backgroundColor = UIColor.red

    return cell



func infoClicked(sender:UIButton)
    let buttonRow = sender.tag
    self.friendId = self.communityPlayerIds[buttonRow]
    self.personalSelf = false
    self.friendName = self.communityPlayers[buttonRow]
    self.performSegue(withIdentifier: "personalStatsSegue", sender: self)


func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 

    self.selectedCellTitle = self.communityPlayers[indexPath.row]
    cellId = indexPath.row
    //print (self.communityPlayerIds[indexPath.row])

    if let cell = tableView.cellForRow(at: indexPath) 
        if cell.isSelected 
            cell.accessoryType = .checkmark
        
    

    if let sr = tableView.indexPathsForSelectedRows 
        print("didSelectRowAtIndexPath selected rows:\(sr)")
        if sr.count == 2
            let tempId_1 = sr[0][1]
            let tempId_2 = sr[1][1]
            self.tempCount = 2
            self.tempPlayerId_1 = self.communityPlayerIds[tempId_1]
            self.tempPlayerId_2 = self.communityPlayerIds[tempId_2]

            print ("you have selected player I'ds: ", self.tempPlayerId_1!, "and ", self.tempPlayerId_2!)
            self.performSegue(withIdentifier: "showHeadToHeadSegue", sender: self)
        


    




func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) 

    if let cell = tableView.cellForRow(at: indexPath as IndexPath) 
        cell.accessoryType = .none
    

    if let sr = tableView.indexPathsForSelectedRows 
        print("didDeselectRowAtIndexPath selected rows:\(sr)")

    




我已经阅读了该主题,但似乎没有任何效果。

【问题讨论】:

【参考方案1】:

怀疑它。

我加了

cell.accessoryType = .none

进入func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell函数

然后,当视图返回时,所有检查都将被删除。

【讨论】:

以上是关于当 VC 从另一个 VC 返回时,如何清除 UITableVIew 中的所有检查?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有任何推送序列的情况下快速从另一个视图控制器访问方法?

从另一个被关闭的 vc 访问 viewcontroller 时的运行方法

iOS:如何更改应用程序中只有一个视图控制器的方向?

ViewController 将 Swift 从一个 VC 推送到另一个 VC 并返回

从另一个导航控制器弹出视图控制器到另一个视图控制器

如何返回导航堆栈?