gpt4 book ai didi

swift - subview 之间的协议(protocol)实现

转载 作者:搜寻专家 更新时间:2023-11-01 07:04:35 25 4
gpt4 key购买 nike

我有一个主视图,我在其中添加了一个 subview 。我想从 subview 触发一个事件并在主视图中捕获该事件。所以我使用了协议(protocol)实现,但我没有收到来自 HomeViewController 的消息。为什么?

协议(protocol)

protocol MyDetectionDelegate : class {
func somethingDiscovered(_ message : String )
}

主视图

class HomeViewController : UIViewController, MyDetectionDelegate {


var childView : DetectionView!

override func viewDidLoad() {
super.viewDidLoad()

childView = DetectionView(frame: CGRect.zero)
childView.delegate = self
self.view.addSubview(childView)
childView.autoPinEdgesToSuperviewEdges(with: UIEdgeInsets.zero)

}

func somethingDiscovered(_ message: String) {
print("Hi I discovered something : \(message)")
}

}

subview :

class DetectionView: UIView {

// Delegation
weak var delegate : MyDetectionDelegate?

// Functions
override init(frame: CGRect) {
super.init(frame: frame)

....

iDiscoveredSomething()
}

func iDiscoveredSomething(){

delegate?.somethingDiscovered("5 potatoes")

}

}

最佳答案

您没有看到委托(delegate)触发任何函数,因为在设置委托(delegate)之前首先运行了初始化(在 HomeViewController 中)。所以当你想调用 somethingDiscovered()

时, delegate? 引用实际上是 nil

您的设置是正确的,协议(protocol)模式将起作用。只是不是以这种特殊方式。

关于swift - subview 之间的协议(protocol)实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48825245/

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