【发布时间】:2020-01-29 09:53:34
【问题描述】:
View1 转至 导航控制器 - View2 转至 View3
我正在尝试创建从 View3 到 View1 的协议委托
在视图1
class NormalUser: UIViewController, NormalUserDelegate {
@objc func showAddressView() {
addressView.isHidden = false
}
override func viewDidLoad() {
super.viewDidLoad()
if let conn = self.storyboard?.instantiateViewController(withIdentifier: "View") as? View
{
conn.delegate = self
}
}
}
在视图3中
weak var delegate: NormalUserDelegate?
func test() {
self.delegate?.showAddressView()
}
协议
protocol NormalUserDelegate: class {
func showAddressView()
}
我无法让它工作。有什么想法吗?
【问题讨论】:
-
我想在这种情况下最好使用 NSnotifications
-
您没有得到答案的原因是您的问题根本不清楚。不要让我们破译你的代码来弄清楚你想问什么,并给我们更多关于你是如何失败的信息,而不是“我无法让它工作”。此外,视图控制器不是视图,因此称它们为“View1”和“View3”只会让您的问题更难理解。
-
在您的示例中,
conn在viewDidLoad之后超出范围。 View3 的delegate成员被标记为weak,因此当viewDidLoad返回时,对它的引用会丢失。要使您的代码正常工作,您必须使conn成为 View1 类的成员,或者删除 View3 的delegate成员上的weak关键字。 -
@UtkuDalmaz,请分享一个演示项目,它重现了您面临的相同问题。
标签: ios swift delegates segue protocols