在 Swift4 中取消选中 TableView 所有 TableView 选择

Posted

技术标签:

【中文标题】在 Swift4 中取消选中 TableView 所有 TableView 选择【英文标题】:Uncheck TableView all TableView Selections in Swift4 【发布时间】:2018-06-03 17:26:56 【问题描述】:

我已经搜索并没有看到解决方案:

我有一个允许多选的 tableView 我想在 Swift 中设置一个按钮,以允许同时清除所有选择。该按钮将位于与 TableView 不同的 viewController(UIViewController)上。可以使用协议和委托,还是需要单例?我希望它在单击按钮时更新。

几年前我在这里看到了 Dejan Skledar 的回答:UITableViewCell checkmark to be toggled on and off when tapped 和名为 resetChecks() 的函数似乎是我正在寻找的,但我无法让我为 Swift 工作而编写的内容。当我运行它时,它实际上并没有进入方法,然后当调用该方法时,它会因“意外找到 nil”而崩溃。拜托,谁能给点建议?谢谢。这是我写的:

func removeChecks() 
    for i in 0...grainTableView.numberOfSections - 1 
        for j in 0...grainTableView.numberOfRows(inSection: i) - 1 
            if let cell = tableView(grainTableView, cellForRowAt: [i,j]) as? UITableViewCell 
                cell.accessoryType == .none 
            
        
    

【问题讨论】:

这是一个非常。非常糟糕的方式。不要自己调用 tableView(_:cellForRowAt: 这样的数据源和委托方法。推荐的方法是在模型中保持selected 状态。然后在所有实例中将此属性设置为false 并重新加载表格视图。您的代码甚至试图更改效率很低的不可见单元格。 小心 - 在您链接的问题中没有一个正确答案(尽管有所有投票)。 我感谢所有建议,因为我正在学习,并且会根据那些更有知识的人的建议来改进。如果您愿意分享一些示例代码以帮助我更好地理解您的观点,我将不胜感激。了解如何调用和使用一些代码,尤其是对于 tableViews 对我来说是一个挑战。 【参考方案1】:

当你呈现 currentVC 时从 preVC 发送对象

class currentVC:UIViewController 

    var delegate:PreVC?

 func removeChecks() 

   if let grainTableView = delegate?.tableView 
      for i in 0...grainTableView.numberOfSections - 1 
          for j in 0...grainTableView.numberOfRows(inSection: i) - 1 
              if let cell = tableView(grainTableView, cellForRowAt: [i,j]) as? UITableViewCell 
                cell.accessoryType == .none 
             
          
      
   

//

func removeChecks() 

   if let grainTableView = delegate?.tableView 

      delegate?.shouldClear = true

      grainTableView.reloadData()

   


【讨论】:

以上是关于在 Swift4 中取消选中 TableView 所有 TableView 选择的主要内容,如果未能解决你的问题,请参考以下文章

从核心数据中按日期对 TableView 进行排序 - Swift4

单击时未打开avaudioPlayer音频(swift4)

UItableview行未在swift4中显示mapkit

Swift 4 TableView Cell 不显示正确的图像

如何取消表格单元格选择

修复了 tableView 函数的“已弃用并将在 Swift 4 中删除”警告