关闭第二个控制器后如何调用第一个控制器中的函数

Mar*_*eng 6 uiviewcontroller ios swift

我有两个 UIViewController,当我单击一个按钮时,它会从第一个视图控制器转到第二个视图控制器。在此之前,我动画了一个 UIView 以移动到另一个地方。关闭第二个视图控制器后,我想将第一个视图控制器中的 UIView 移回原来的位置。但是,当我在关闭第二个视图控制器后从第二个视图控制器调用一个函数来为第一个视图控制器中的 UIview 设置动画时,它无法获取 UIView 的属性,并且无法对其执行任何操作。我想是因为第一个 UIViewController 还没有加载。这是问题吗?我应该如何解决这个问题?

小智 7

There are two solutions you can either use swift closures

class FirstViewController: UIViewController {

      @IBAction func start(_ sender: Any) {
           guard let secondController = self.storyboard?.instantiateViewController(withIdentifier: "SecondController") as? SecondController else { return }
        secondController.callbackClosure = { [weak self] in
            print("Do your stuff")
        }
        self.navigationController?.pushViewController(secondController, animated: true)
       }
}
//----------------------------

class SecondController: UIViewController {

      var callbackClosure: ((Void) -> Void)?

      override func viewWillDisappear(_ animated: Bool) {
         callbackClosure?()
          }
 }
Run Code Online (Sandbox Code Playgroud)

or you can use protocols

class FirstViewController: UIViewController {

@IBAction func start(_ sender: Any) {
       guard let secondController = self.storyboard?.instantiateViewController(withIdentifier: "SecondController") as? SecondController else { return }
        secondController.delegate = self
    self.navigationController?.pushViewController(secondController, animated: true)
   }    

}

extension ViewController : ViewControllerSecDelegate {

    func didBackButtonPressed(){
         print("Do your stuff")
    }
}
//--------------------------


protocol SecondControllerDelegate : NSObjectProtocol {
    func didBackButtonPressed()
}

class SecondController: UIViewController {

    weak var delegate: SecondControllerDelegate?

         override func viewWillDisappear(_ animated: Bool) {
              delegate?.didBackButtonPressed()
         }
 }
Run Code Online (Sandbox Code Playgroud)