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

标签 ios swift class delegates protocols

我有一个 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/

相关文章:

javascript - 创建phonegap项目的 list -有人可以添加更多元素

iphone - 通过设置 Root View Controller 来切换 View 有什么问题吗?

ios - 检测加载方向

ios - swift 代码在 Xcode 7 中不起作用 - 无法调用初始化程序

c# - 'namespace' 但像 'type' 一样使用

css - 如何将预先存在的 css 类附加到 Cytoscape JS for Angular 中的节点标签

ios - 无法分配 UIImage 类型的值?输入 PFFile?

swift - 应用启动时键盘焦点位于 NSCollectionView 上

ios - 如何编写一个关于如何在 Swift 5 中使用委托(delegate)的简单示例

ios - 选择搜索栏时,导航栏下的容器 View 没有向上移动