【问题标题】:Swift - Protocol Delegate from TableView not working - Present ModallySwift - TableView 中的协议委托不起作用 - 以模态方式呈现
【发布时间】:2018-01-02 08:15:21
【问题描述】:

我有一个带有按钮的视图控制器,当单击该按钮时,它会转到带有表格视图的第二个视图控制器。这两个场景通过情节提要联系起来,就像现在的模态一样。我希望在第二个视图控制器的表格视图中选择一行时,第一个视图控制器中的按钮文本会发生变化。

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

任何帮助将不胜感激,我仍然是 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)

    }
}

【问题讨论】:

  • 在展示模态 VC 时,您是否将委托作为自己传递?
  • 抱歉,我不太清楚这意味着什么,所以我想说我还没有这样做。
  • 请出示您的prepare(for segue:)方法,如果没有实现此方法,请按照Yun CHEN的建议实现。
  • 快乐编码 :-)

标签: ios swift uitableview delegates presentmodalviewcontroller


【解决方案1】:

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

// 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
    }
}

【讨论】:

  • 您能解释一下为什么要将第二个视图控制器的委托设置为第一个视图控制器吗?
  • 第二个视图控制器会回调第一个来传递值。所以第二个需要知道该叫谁。
猜你喜欢
  • 1970-01-01
  • 2017-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 2018-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多