gpt4 book ai didi

ios - 调用swift后委托(delegate)不执行

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

我有一个 viewController 和另一个 containerView insider 设置为临时出现(以编程方式添加)。 containerView 是一种操作栏,它允许您更改 viewController 的值。但是,从按钮的 IBAction 调用的协议(protocol)不会调用在 viewController 类中设置的协议(protocol)。

这是两个类的代码:

class viewController: UIViewController, updateListDelegate {
let dataSource = containerView()

override func viewDidLoad() {
super.viewDidLoad()
dataSource.delegate = self
}

func updateList(sender: containerView) {
print("is called") //is not printed
}
}

containerView 中的代码:

protocol updateListDelegate {
func updateList(containerView)
}

class containerView: UIViewController {
var delegate: updateListDelegate?

@IBAction func AddSong(_ sender: UIButton) {
self.delegate?.updateList(sender: self)
}
}

最佳答案

如果这个方法只是被一个对象调用,那么,在我看来,我不会定义一个协议(protocol)。如果多个对象要调用这个方法,那么我会定义一个协议(protocol)。这通常是您使用基本委托(delegate)向后调用方法的方式。

class ViewController: UIViewController {

let container = ContainerView()

override func viewDidLoad() {
super.viewDidLoad()

container.viewControllerDelegate = self
// push to this instance of container at some point

}

func doSomething() {
print("great success")
}

}


class ContainerView: UIViewController {

weak var viewControllerDelegate: ViewController?

@objc func someAction() {
if let viewControllerDelegate = viewControllerDelegate {
viewControllerDelegate.doSomething()
}
}

}

// prints "great success" when someAction() called

人们最常犯的错误之一是没有跟踪实例。要让委托(delegate)工作,您必须确保您使用的是已实例化并将这些委托(delegate)分配给的特定实例。

关于ios - 调用swift后委托(delegate)不执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49196919/

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