ios - Swift 委托(delegate)永远不会被调用

标签 ios swift delegates protocols uicontainerview

我知道这个问题已经在论坛中了,但我不知道为什么我的委托(delegate)不起作用。顺便说一句,我是第一次和他们一起工作。

这是代码

View Controller :

class ViewController: UIViewController, ContainerViewControllerDelegate{

    override func viewDidLoad() {
        super.viewDidLoad()

        let controller = ContainerViewController()
        controller.containerDelegate = self

    }

    func didScrollChangeAppearanceBarButtonItem(change: Bool) {
        if(change == true){
            print("true")
        }else{
            print("false")
        }
    }

}

容器 View :
protocol ContainerViewControllerDelegate {
     func didScrollChangeAppearanceBarButtonItem(change: Bool)
}

class ContainerViewController: UIViewController, UIScrollViewDelegate{

    var containerDelegate: ContainerViewControllerDelegate?

    func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {

        if(velocity.y>0) {
            containerDelegate?.didScrollChangeAppearanceBarButtonItem(change: false)
            print("1")

        } else {
            containerDelegate?.didScrollChangeAppearanceBarButtonItem(change: true)
            print("2")
        }
    }
}

我正在尝试做的事情:当我滚动时,我想向我的 ViewController 发送一个 bool 值。当 bool == true 我想做某事时,当 bool == false 我想做其他事情时。

我希望有人可以帮助我:)

最佳答案

而不是这个:

let controller = ContainerViewController() 
controller.containerDelegate = self 

在 viewDidLoad() 之外创建变量:
var controller:ContainerViewController! 
override func viewDidLoad() { 
    super.viewDidLoad() 
    controller = ContainerViewController() 
    controller.containerDelegate = self 
}

原因是一旦 viewDidLoad 函数到达其结束,在 viewDidLoad 中初始化的 Controller 就会被释放

编辑

我将详细说明,如果您尝试通过 segue 访问您的其他 View Controller ,这是一种错误的方式。而是这样做:
self.performSegueWithIdentifier("your identifier", sender: self)

然后添加一个函数:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if (segue.identifier == "Your identifier") {
        guard let controller = segue.destination as? ContainerViewController else { return }
        controller.delegate = self
    }
}

关于ios - Swift 委托(delegate)永远不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61235400/

相关文章:

ios - 如何在单独的 Storyboard中显示另一个 View

ios - 自 iOS 12.2 更新以来,应用程序崩溃没有崩溃报告

c# - Delegate 类中 invoke 方法的声明在哪里?

ios - 如何从我的项目和机器上卸载 PhoneGap

ios - 如何在 Swift 中将多个图像上传到单个推文中?

iphone - 如何创建一个 iPhone 应用程序来拍照并将其发送回 Oracle 数据库?

c# - 当 C# 中的变量值发生变化时,如何执行代码?

iphone - CustomTabBarController 不响应委托(delegate)回调

ios - nsset,核心数据,正确的谓词

ios - 尝试使用 AVPlayer 播放视频时收到错误