[英]Swift 4 - Can't call delegate method
我在一个viewController
定义了一个delegate
方法, viewController
所示:
import UIKit
protocol PatientsUserDelegate: NSObjectProtocol {
func patientsUserDelegateMethod()
}
class PatientsUserController: UIViewController {
var patientsUserDelegate: PatientsUserDelegate?
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("Here")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@IBAction func nextButtonPressed(_ sender: Any) {
patientsUserDelegate?.patientsUserDelegateMethod()
}
}
我想做的是在另一个viewController
调用此委托方法, viewController
所示:
class PatientsRegistration: UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource, PatientsUserDelegate {
var patientsUserController = PatientsUserController()
override func viewDidLoad() {
patientsUserController.patientsUserDelegate = self
}
func patientsUserDelegateMethod() {
print("Here")
}
}
在我拥有的第一个viewController
中, viewController
被调用,但未调用委托方法。 我究竟做错了什么?
问题是这一行:
var patientsUserController = PatientsUserController()
问题在于这与您实际要交谈的PatientUserController不同。 它是一个新的PatientUserController,与众不同,它只是漂浮在空中,与正在运行的程序无关。 因此,当您设置代表时...
patientsUserController.patientsUserDelegate = self
...您设置了错误的PatientUserController的委托。
这是一个常见的初学者错误,我为此写了一篇博客文章:
http://www.programmingios.net/dont-make-a-new-instance-by-mistake/
正如您在阅读该文章时所看到的那样,您需要获得对真实的 PatientsUserController的引用,该引用已存在于视图控制器层次结构中。 如何执行取决于各个视图控制器之间的关系。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.