gpt4 book ai didi

ios - UICollectionView 协议(protocol)问题

转载 作者:可可西里 更新时间:2023-11-01 01:07:33 25 4
gpt4 key购买 nike

我有一个 viewController,它通过一个操作按钮显示一个“CollectionViewController”。

@objc func addPhoto() {
let layout = UICollectionViewFlowLayout()
let photoController = UINavigationController(rootViewController: PhotoController(collectionViewLayout: layout))
present(photoController, animated: true, completion: nil)
}

在“PhotoController”中,我尝试使用标准协议(protocol)程序将数据从这个 Controller 传回原始的 viewController。

protocol PhotoControllerDelegate {
func store(image: UIImage)
}

var delegate: PhotoControllerDelegate?

@objc func handleSave() {
if let image = headerImage {
delegate?.store(image: image)
}

///Dimiss viewController
dismiss(animated: true, completion: nil)
}

现在回到原来的 viewController,我重新实例化了被解雇的 PhotoController:

let photoController = PhotoController()

并在 viewDidLoad() 中分配委托(delegate)

photoController.delegate = self

然后在原来的viewController中提供委托(delegate)方法:

func store(image: UIImage) {
selectedPhotoImage.image = image
}

问题是:这个方法甚至没有被调用。我通常没有任何问题,但是这个问题难倒了我。

任何帮助都会很棒。

附言我的 viewControllers 里面有很多额外的垃圾,所以无法发布完整的代码。

最佳答案

确保将 delegate 添加为 self 以接收 viewController 中的 protocol 事件

@objc func addPhoto() {
let layout = UICollectionViewFlowLayout()
let objVC = PhotoController(collectionViewLayout: layout)
objVC.delegate = self
let photoController = UINavigationController(rootViewController: objVC)
present(photoController, animated: true, completion: nil)
}

不要忘记在同一个 viewController 中添加 delegate。使用 extension 使其成为干净的代码。

extension SourceController: PhotoControllerDelegate {
func store(image: UIImage) {
selectedPhotoImage.image = image
}
}

PhotoController 中定义 protocol

public protocol PhotoControllerDelegate {
func store(image: UIImage)
}

关于ios - UICollectionView 协议(protocol)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54566071/

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