gpt4 book ai didi

ios - 如何从自定义 UICollectionViewCell NIB 呈现 popoverPresentationController

转载 作者:行者123 更新时间:2023-11-30 12:05:00 29 4
gpt4 key购买 nike

我有一个在 UIViewController 中定义的弹出窗口,但现在需要从自定义 UICollectionViewCell 中呈现。 present 不再起作用,因为该类是 UICollectionViewCell 而不再是 UIViewController。如何从自定义 UICollectionViewCell 中呈现弹出窗口。

   @IBAction func period(_ sender: Any) {

let storyboard = UIStoryboard(name: "ScoreClockPopoverViewController", bundle: nil)
let scoreClockPopoverViewController = storyboard.instantiateViewController(withIdentifier: "ScoreClockPopoverViewController") as! ScoreClockPopoverViewController

scoreClockPopoverViewController.modalPresentationStyle = .popover

let popover = scoreClockPopoverViewController.popoverPresentationController!
popover.delegate = self
popover.permittedArrowDirections = .any
popover.sourceView = periodButton
popover.sourceRect = periodButton.bounds


present(scoreClockPopoverViewController, animated: true, completion:nil)
//Error: Use of unresolved identifier 'present'

}

如果我尝试将 UICollectionViewCell 扩展为 UIViewContoller,我会收到以下错误:类型“HeaderCollectionViewCell”的扩展无法从类“UIViewController”继承

最佳答案

将您的CollectionViewcontroller设置为CollectionViewCell的委托(delegate)。

当调用 CollectionViewCell 上的 period 函数时,调用单元格委托(delegate)的“didClickPeriod”函数(您自己创建)。

包括这个,例如在你的牢房里

protocol HeaderCollectionViewCellDelegate {
func didClickPeriod(sender: Any)
}

确保单元格具有属性

var delegate: HeaderCollectionViewCellDelegate!

注意!。假设您从 Storyboard实例化,您无法在实例化时传递委托(delegate),而必须“手动”填充它。这 !基本上表明您可以使用此属性,就好像它始终已设置一样 - 假设您正确填充了该属性,这将使您免于一直展开。如果不这样做,您将会遇到崩溃。

在您的周期函数中只需执行

@IBAction func period(_ sender: Any) {
self.delegate.didClickPeriod(sender)
}

在您的CollectionViewController中确保它实现了协议(protocol),例如通过包括

extension YourCollectionViewController: HeaderCollectionViewCellDelegate {
func didClickPeriod(sender: Any) {
// your previous presentation logic.
// But now you're in the CollectionViewController so you can do
...
present(scoreClockPopoverViewController, animated: true, completion:nil)

}
}

关于ios - 如何从自定义 UICollectionViewCell NIB 呈现 popoverPresentationController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46773361/

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