Ios 如何从UICollectionViewCell中的按钮关闭UICollectionViewController

Ios 如何从UICollectionViewCell中的按钮关闭UICollectionViewController,ios,swift,uicollectionview,uicollectionviewcell,dismiss,Ios,Swift,Uicollectionview,Uicollectionviewcell,Dismiss,我正在制作一个入职屏幕,在最后一个屏幕上,我有一个按钮,上面写着“继续”,应该会关闭入职屏幕。入职屏幕是一个集合视图控制器,每个页面都有单元格。请不要犹豫,要求澄清我不知道还有什么补充 谢谢 编辑 所以我实现了用户Francesco Deliro的答案,第一个问题是我意外地将“delegate=self”添加到viewDidLoad()中。我修复了这个问题,但是viewController仍然没有关闭。 我的代码如下所示,位于项目的“我的viewController”单元格中: let

我正在制作一个入职屏幕,在最后一个屏幕上,我有一个按钮,上面写着“继续”,应该会关闭入职屏幕。入职屏幕是一个集合视图控制器,每个页面都有单元格。请不要犹豫,要求澄清我不知道还有什么补充

谢谢

编辑 所以我实现了用户Francesco Deliro的答案,第一个问题是我意外地将“delegate=self”添加到viewDidLoad()中。我修复了这个问题,但是viewController仍然没有关闭。 我的代码如下所示,位于项目的“我的viewController”单元格中:

    let loginCell = LoginCell()
    loginCell.delegate = self
这是分机

extension TutorialViewController: LoginCellDelegate {
func didCompleteOnboarding() {
    print("I should dimiss")
    self.dismiss(animated: true, completion: nil)
}
我不需要在类中的任何地方调用该函数,只需将其放在主类之外即可

编辑2 下面是我如何将我的按钮动作连接到原始

    @objc func continueTapped() {
    ...
    continueButton.transform = CGAffineTransform(scaleX: 0.5, y: 0.5)
    UIView.animate(withDuration: 1.0, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 1, options: .allowUserInteraction, animations: { [weak self] in
        self?.continueButton.transform = .identity
        let transition = CATransition()
        transition.duration = 0.5
        transition.type = CATransitionType.push
        transition.subtype = CATransitionSubtype.fromRight
        transition.timingFunction = CAMediaTimingFunction(name:CAMediaTimingFunctionName.easeInEaseOut)
        self?.window!.layer.add(transition, forKey: kCATransition)
        self?.delegate?.didCompleteOnboarding()
    }, completion: { (success) in
        token = true
        defaults.set(token, forKey: "DidSee")
    })
}

您可以使用委派,例如:

protocol YourCellDelegate: class {
    func didCompleteOnboarding()
}
然后在你的牢房里:

class CustomCell: UICollectionViewCell {
    weak var delegate: YourCellDelegate?

      // in your button action
    func dismissAction() {
        delegate.didCompleteOnboarding()
    }

 }
最后,在视图控制器中,在cellForItem函数中设置单元格委托:

yourCell.delegate = self
并加上:

extension YourViewController: YourCellDelegate {
    func didCompleteOnboarding() {
        // dismiss here 
    }
}

工作正常,但按钮不工作:(按钮不按我需要更多信息来帮助你):/你可以问一个新问题,解释发生了什么并显示一些代码。我解决了它,我不得不让按钮成为一个懒惰的变量-。-但我确实有一个关于你的解决方案的问题。我在哪里调用方法didCompleteOnBoarding()在viewControllerI中,我已经实现了您所说的一切,但是,我不知道从那里该做什么。它似乎不起作用。它起作用。当您按下按钮,代理调用函数,并且您的视图控制器收到回调时,您可以在那里实现解除。更新您的问题,并向我展示您如何在中实现它您的代码。;)