gpt4 book ai didi

ios - Swift 委托(delegate)不调用父函数

转载 作者:行者123 更新时间:2023-11-30 11:57:28 25 4
gpt4 key购买 nike

我正在尝试获取一个 subview Controller ,它显示在主父 View Controller 底部的 View 容器中。当我按下子项中的按钮时,“从基本 VC 按下按钮”会打印到控制台,但“从主 VC 按下温暖按钮”不会打印到控制台。我需要在主视图 Controller 中调用打印第二条消息的函数。这是相关的BasicViewController代码:

protocol BasicVCDelegate: class {
func warmButton()
}

class BasicViewController: UIViewController {
weak var BasicVCDelegate: BasicVCDelegate?

@IBOutlet weak var warmButton: UIButton!

@IBAction func warmButton(sender: AnyObject) {
print("Button pressed from Basic VC")
BasicVCDelegate?.warmButton()
}
}

来自 ViewController.swift

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, BasicVCDelegate {
override func viewDidLoad() {
pauseButton.isEnabled = false

hideAll();
self.basicContainer.isUserInteractionEnabled = true;
self.basicContainer.isHidden = false;

self.timerLabel.text = String("00:00:00");

eventTable.dataSource = self
eventTable.delegate = self

loadEvents(event: "timer start")
super.viewDidLoad()
}

// CREATE SEGUEs
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let nav = segue.destination as? UINavigationController, let classBasicVC = nav.topViewController as? BasicViewController {
classBasicVC.BasicVCDelegate = self
}
}

// FUNCTIONS FOR BASIC VIEW CONTROLLER TO REFERENCE
func warmButton() {
print("Warm button pressed from main VC")
}
}

编辑:从下面的每个人看来,ViewController 中的以下代码部分似乎导致了问题(if 语句中的行从未被调用):

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let nav = segue.destination as? UINavigationController, let classBasicVC = nav.topViewController as? BasicViewController {
classBasicVC.basicVCDelegate = self
}
}

这可能是由于我对委托(delegate)和prepareforsegue函数不熟悉。需要帮助弄清楚“if let”之后应该做什么

编辑2:根据一些用户的建议,将上面的代码替换为以下代码(仍然没有到达打印语句):

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let nav = segue.destination as? BasicViewController, let classBasicVC = nav.basicVCDelegate {
print("got here!!")
}
}

最终编辑:感谢您的帮助!经过一番尝试后,以下内容有效(除了当我解决它时变为错误的警告 - 我可以忍受警告)。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let nav = segue.destination as? BasicViewController, let classBasicVC = nav as? BasicViewController? {
classBasicVC?.basicVCDelegate = self
}
}

最佳答案

应该是这样的,而不是您上次编辑的代码:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let classBasicVC = segue.destination as? BasicViewController {
classBasicVC.basicVCDelegate = self
}
}

关于ios - Swift 委托(delegate)不调用父函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47645284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com