如何将 tableViewCell 中 Button 的文本 print/pass 转换为 Swift 中的另一个 ViewController?

How to print/pass the text of a Button in a tableViewCell to another ViewController in Swift?

我想在单击特定 tableViewCell 时打印按钮的文本。还要注意,单击也会关闭视图。请帮我解决这个问题

下面是我试过的代码:

extension AlertViewController: UITableViewDataSource, UITableViewDelegate {
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return flags.count
    }
    
    
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let flag = flags[indexPath.row]
        let cell = tableView.dequeueReusableCell(withIdentifier: "FlagTableViewCell") as! FlagTableViewCell
        cell.setUp(flag: flag)
        //clickedFlagName = cell.flagNameLbl.text!
//        print("Clickeeeeeeeeeeddddddd" + "\(clickedFlagName)")
        clickedFlagName = cell.flagNameBtn.title(for: .normal)!
        print("WhennnnClickeeeeeeeeeeddddddd   " + "\(clickedFlagName)")
        cell.flagNameBtn.addTarget(self, action: #selector(self.clickedFlagAction), for: .touchUpInside)
        
        return cell
    }
    
   
    @objc func clickedFlagAction(_ sender: Any?) {
        print("Tapped")
        dismiss(animated: true)
    }
}
 

使用没有附加操作但带有 IBOutlet 的按钮设置您的 FlagTableViewCell。我们称它为 flagCellButton.

在你的tableView(_:cellForRowAt:)方法中,

出列一个单元格并将其转换为 FlagTableViewCell 类型,就像您现在所做的那样。然后在 flagCellButton 上调用 removeTarget(_:action:for:),为目标和操作传入 nil,并为控制事件传入 .touchUpInside。 (这会清除回收单元格中的所有操作。)

调用 cell.flagCellButton.addTarget(_:action:for:) 从您的视图控制器向单元格添加 IBAction。

设置您的 IBAction 以期望发件人是 UIButton 类型。在那个 IBAction 中,获取发件人的标题,并将该标题传递给新的视图控制器,然后关闭当前的视图控制器。

编辑:

请注意,如果您将应用设置为要求 iOS >= v 14,则可以使用 UIControl 中的新方法,让您将 UIAction 附加到 button/control 而不是 target/action。 UIAction 的优点是它采用闭包而不是选择器,因此您可以提供代码 in-line 而不必在视图控制器中定义 IBAction 方法。您将使用类似的方法从按钮中删除旧的 `UIAction 并添加一个新的。