Swift - TableView的协议代理无法正常工作 - 以模态呈现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift - TableView的协议代理无法正常工作 - 以模态呈现相关的知识,希望对你有一定的参考价值。

我有一个带有按钮的视图控制器,当单击它时会转到带有表视图的第二个视图控制器。这两个场景通过故事板链接,如Present Modally。我希望在第二个视图控制器的表视图中选择行时,第一个视图控制器中的按钮文本会更改。

选择单元格时按钮是否有变化是否有原因?

任何帮助将不胜感激,我仍然是Swift的初学者。

以下是相关的代码行:

查看控制器1

class ChartsViewController: UIViewController {

    @IBOutlet weak var titleButton: UIButton!

}

extension ChartsViewController: ModalDelegate {

    func didSelectValue(value: String) {
        self.titleButton.setTitle(value, for: .normal)
        }
}

查看控制器2

protocol ModalDelegate: class {
    func didSelectValue(value: String)
}

class DashboardModalViewController: UIViewController {
    var delegate: ModalDelegate?
}

extension DashboardModalViewController: UITableViewDelegate {
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let rowTitle = self.rows[indexPath.row].text
        print (rowTitle)
        delegate?.didSelectValue(value: rowTitle)
        dismiss(animated: true, completion: nil)

    }
}
答案

我认为您需要在View Controller 1的prepare方法中为segue设置第二个控制器的委托,如:

// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let dashboardModalViewController = segue.destination as? DashboardModalViewController {
        dashboardModalViewController.delegate = self
    }
}

以上是关于Swift - TableView的协议代理无法正常工作 - 以模态呈现的主要内容,如果未能解决你的问题,请参考以下文章

21.Swift中tableView的使用

Firebase + Swift:无法删除 tableView 中的行

Swift - 第二次加载后 Tableview 无法正确重新加载

无法从swift ios中的一段tableview中删除单元格

golang实现正/反向代理服务

如何在 swift 中更改 tableView 部分中的文本颜色