我有一个swift文件,它是类类型UICollectionViewCell,并且有一个按钮,我想调用另一个视图,该视图是collectionviewcontroller。
我该怎么做呢?
我正在尝试执行此操作,但无法完成此功能
func handleStartButtonClick(){
let layout = UICollectionViewFlowLayout()
let mainViewController = MainViewController(collectionViewLayout: layout)
}
最佳答案
您应声明一个委托协议,并且您的控制器应符合该协议。然后,在单元格中声明该委托的变量,并在cellforitemat函数中执行以下操作:
在您的CollectionViewCell swift文件中,在您的类之外声明一个协议:
protocol MyCollectionViewCellDelegate {
func someThingThatMyControllerShouldDo()
}
class MyCollectionViewCell: UICollectionViewCell {
}
然后在您的CollectionViewCell类中:
var delegate: MyCollectionViewCellDelegate?
在Controller的cellForItemAt函数中,您可以将此变量的值初始化为控制器:
cell.delegate = self
然后在CollectionViewCell中,只要您想让控制器执行某项操作,就只需调用委托的函数:
self.delegate?.someFunctionDeclaredInDelegate()
当然,您的ViewController必须符合此协议,这意味着它应该实现那些协议方法:
extension MyViewController: MyCollectionViewDelegate {
func someThingThatMyControllerShouldDo() {
self.performSegue(withIdentifier: "ShowMySecondController", sender: nil)
}
}