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

09-25 18:44