如何从不同的类运行关闭视图功能?

Posted

技术标签:

【中文标题】如何从不同的类运行关闭视图功能?【英文标题】:How to run a close view function from a different class? 【发布时间】:2016-12-24 13:48:21 【问题描述】:

我创建了一个注册视图 (class SignUp: UICollectionViewCell),并且我有一个代码可以再次关闭该视图,例如带有关闭按钮。

我正在另一个类 (class SignUpLauncher: NSObject, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout) 中启动该视图,并且要关闭的代码也在该类中。

现在我想在注册成功后关闭该视图。在我的注册课程中,我运行这个:

    let signUpLauncher = SignUpLauncher()
    func handleClose()
        signUpLauncher.handleClose()
    

        FIRAuth.auth()?.createUser(withEmail: email, password: password, completion:  (user, err) in
            if let error = err 
                print(error.localizedDescription)
             else 

                guard let uid = user?.uid else
                    return
                
                //Successfully authenticated user
                print("Sucess")

                let ref = FIRDatabase.database().reference(fromURL: "myURL.com/")
                let usersRef = ref.child("Users").child(uid)
                let values = ["name": name, "email": email]
                usersRef.updateChildValues(values, withCompletionBlock:  (error, ref) in

                    if error != nil 
                        print(error)
                        return
                    

                    print("Saved user successfully into DB")
                    self.handleClose()

                )

            
        )

这是SignUpLauncher 类中的handleClose() 函数:

     func handleClose()

        UIView.animate(withDuration: 0.5) 
            self.closeButton.alpha = 0

            if let  window = UIApplication.shared.keyWindow
                self.self.collectionView.frame = CGRect(x: 0, y: window.frame.height, width: self.collectionView.frame.width, height: self.collectionView.frame.height)
                self.navBar.frame = CGRect(x: 0, y: window.frame.height, width: self.navBar.frame.width, height: 65)
                self.closeButton.frame = CGRect(x: window.frame.width - 34 ,y: window.frame.height + 30,width: 18,height: 18)
            
        

    

问题是,什么都没有发生。我认为,这与self 有关,但我不知道具体是什么。

【问题讨论】:

你的问题没有多大意义。你让它听起来像你试图关闭一个集合视图单元格。你不应该那样做。集合视图拥有并管理其单元格。如果这不是你的意思,那么你需要更好地解释。 您说“我正在从 SignupLauncher 启动注册”。 “启动”是什么意思?应用程序启动。视图被添加到超级视图中。视图控制器被推送或呈现。也不清楚SignupSignupLauncher 是什么类。 为了更好地理解:我使用 UICollectionViewCell 作为构造创建了一个自定义视图(“SignUp”)。我不使用 UICollectionViewController。 @DuncanC 'Launcher' 包含 showView() 和 handleClose()。他们在屏幕上和屏幕外为 Cell 设置动画。 Collection 视图单元格并非设计用于也不应该在集合视图之外使用。没有理由这样做,也有很多理由不这样做。 【参考方案1】:

您的代码没有意义。您不应该在集合视图之外使用集合视图单元格。您创建一个新对象并期望它指向当前视图控制器上的按钮。它不会。您应该将视图控制器的 IBAction 方法放在视图控制器中。

您需要停下来继续阅读 ios 应用设计的基础知识。现在你错的比对的多,你只会感到沮丧。

【讨论】:

以上是关于如何从不同的类运行关闭视图功能?的主要内容,如果未能解决你的问题,请参考以下文章

如何以不同用户和管理员身份从命令提示符运行程序 [关闭]

如何从 Google App Script 中的文件运行保存的 Big Query 脚本? [关闭]

如何从不同的服务器运行功能?

弹出窗口关闭时如何在主视图控制器中快速运行代码

在一个视图上使用不同数据填充多个表的最佳方法是啥? [关闭]

从不同的视图更改标签[关闭]