tableview 如何追加到空数组选中的单元格?

tableview how to append to empty array checked cells?

class Cell: UITableViewCell {

    @IBOutlet weak var checkBtn     : UIButton!


    @IBAction func selectButton(_ sender: UIButton) {
        if checkBtn.isSelected == false {
            checkBtn.isSelected = true
        } else {
            checkBtn.isSelected = false
        }
    }
}

我有一个单元格class。但是 IBACtion 不起作用。

我也做了一个ViewController如下

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)   -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "exampleCell") as! Cell

    if cell.checkBtn.isSelected == true {
            anEmptyArray.append(myTableViewData[indexPath.row])
        } else {

        }

}

如何获取选定的单元格?

您可以使用下面的table视图委托方法,下面是代码。


func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
     anEmptyArray.append(myTableViewData[indexPath.row])
}

还要确保您的 viewDidLoad 方法中有以下代码行。

 tableView.delegate = self

使用这种方法,您只需 select 单元格。就这些了。

另一种方法

您需要创建新的委托。

protocol TableViewCellDelegate: AnyObject {
   func didSelect(cell: YourTableViewCell) // Don't need to define just declare.
}

现在在 UITableViewCell class 中创建一个委托实例,并在按钮操作中调用方法。

class Cell: UITableViewCell {

    @IBOutlet weak var checkBtn     : UIButton!
    weak var delegate: TableViewCellDelegate? // Instance of Delegate protocol


    @IBAction func selectButton(_ sender: UIButton) {
        if checkBtn.isSelected == false {
            checkBtn.isSelected = true
        } else {
            checkBtn.isSelected = false
        }
        
        self.delegate?.didSelect(cell: self) // triggering the delegate method. 
    }
}

现在哪个代码会被触发?我们需要定义它。转到您的 UITableViewController,并扩展 class,例如

extension YourTableViewController: TableViewCellDelegate {
     func didSelect(cell: YourTableViewCell) {
       // Now you have the cell, and you can get the indexPath of this cell
         if let indexPath = tableView.indexPath(for: cell) {
            // Now you have indexPath and you know the drill.
             

            // If you want to remove that cell delete that value from array and reload tableView.
            
            myTableViewData.remove(at: indexPath.row)
            tableView.reloadData()

            
         }
     }
}

不要忘记像下面这样制作 YourTableViewController 的单元格委托。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)   -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "exampleCell") as! YourTableViewCell

    cell.delegate = self

}