如何从UICollectionViewCell中的按钮关闭UICollectionViewController

时间:2018-11-11 20:16:27

标签: ios swift uicollectionview uicollectionviewcell dismiss

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

谢谢

修改 因此,我实现了用户Francesco Deliro的答案,第一个问题是我不小心将“ delegate = self”添加到了viewDidLoad()中。我解决了这个问题,但viewController仍然没有关闭。 我的代码如下所示,在我的viewController单元格中:

ngOnInit() {
    if (childId > 0){
                 this.data.getChildInfo(childId).subscribe(
                  (data: ChildInfo) => {
                    this.ChildInfo = data;
                    this.isLoadingResults = false; },
                  (error) => {
                    return this.loadingMessage = 'There has been an error -' + error.message;
                   }
                );
                 } else {
                      this.isLoadingResults = false;
                       this.ChildInfo =  new ChildInfo;
                }
      },
     (error) => {
      return this.loadingMessage = 'There has been an error  -' + error.message;
     });
}

这是扩展名

    let loginCell = LoginCell()
    loginCell.delegate = self

我不需要在类中的任何地方调用该函数,只需将其放在主类之外即可。

编辑2 这是我将按钮动作连接到原始按钮的方式

extension TutorialViewController: LoginCellDelegate {
func didCompleteOnboarding() {
    print("I should dimiss")
    self.dismiss(animated: true, completion: nil)
}

1 个答案:

答案 0 :(得分:0)

您可以使用委托,例如:

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 
    }
}