【发布时间】:2021-03-14 11:11:27
【问题描述】:
为什么我的代表团不起作用?
在我的示例中,操作按钮在单击时起作用,但由于某种原因,它没有到达我的第二个控制器中的 didAction 函数。
protocol HomeControllerDelegate: class {
func didAction()
}
class HomeController: UIViewController {
weak var delegate: HomeControllerDelegate?
private let actionButton: UIButton = {
let button = UIButton(type: .system)
button.setTitle("Action", for: .normal)
button.setTitleColor(.white, for: .normal)
button.backgroundColor = .black
button.setHeight(50)
button.setWidth(100)
button.addTarget(self, action: #selector(handleAction), for: .touchUpInside)
return button
}()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
view.addSubview(actionButton)
actionButton.centerX(inView: view)
actionButton.centerY(inView: view)
}
@objc func handleAction() {
print("DEBUG: Handle Action Button delegate here....")
delegate?.didAction()
}
}
class SecondController: UIViewController {
let homeController = HomeController()
override func viewDidLoad() {
super.viewDidLoad()
homeController.delegate = self
}
}
extension SecondController: HomeControllerDelegate {
func didAction() {
print("DEBUG: In SecondController - didAction()")
}
}
【问题讨论】:
-
因为
let homeController = HomeController()是错误的 HomeController。 programmingios.net/dont-make-a-new-instance-by-mistake -
调试:当
delegate?.didAction()被调用时,是delegatenil吗?这是迈出的一大步。现在,有了更多经验:homeController它在哪里展示?我认为屏幕上显示的那个和设置了delegate的那个不是同一个实例。 -
作为调试提示....
delegate?.didAction()中的?表示“我不在乎是否会发生这种情况”。如果它不是你想要的,你不应该这样编码。 -
感谢您的指导,是的,我知道这是一个基本问题,而且一分钱正在慢慢下降,这是一个基本问题!我现在将创建控制器并将它们添加到我的根控制器。感谢马特的链接!我有。很多东西要学,还有很长的路要走。问题是我参加了一些 Udemy 课程,现在我正在尝试自己尝试,似乎有些基础知识没有得到解释,或者我可能误解了。在线课程不如亲自上课,我确实在网上挣扎。但是我现在已经购买了一些关于 hackingwith swift 的书籍,并且会继续关注