Swift - 来自 TableView 的协议委托不起作用 - 模态呈现
Swift - Protocol Delegate from TableView not working - Present Modally
我有一个带有按钮的视图控制器,单击该按钮会转到带有 table 视图的第二个视图控制器。这两个场景通过故事板联系起来,作为 Present Modally。当在第二个视图控制器的 table 视图中选择一行时,我希望第一个视图控制器中的按钮文本发生变化。
选择单元格后按钮没有改变的原因是什么?
任何帮助将不胜感激,我仍然是 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
方法中设置第二个控制器的委托,例如:
// 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
}
}
我有一个带有按钮的视图控制器,单击该按钮会转到带有 table 视图的第二个视图控制器。这两个场景通过故事板联系起来,作为 Present Modally。当在第二个视图控制器的 table 视图中选择一行时,我希望第一个视图控制器中的按钮文本发生变化。
选择单元格后按钮没有改变的原因是什么?
任何帮助将不胜感激,我仍然是 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
方法中设置第二个控制器的委托,例如:
// 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
}
}