考虑两个视图控制器Controller1Controller2,我在控制器1中创建了许多UITextField的形式,因为当用户单击特定的UITextField时,它将移动到Controller2并在其中选择数据。

Controller2中选择数据后,它会自动移至Controller1,同时从controller2返回到controller1时,其他UITextfield数据将被清除,仅从controller2中找到所选数据。选择后,我需要在UITextfield中找到所有数据。

这是从Controller2返回到Controller1的代码

 if(Constants.SelectedComplexName != nil)
  {
      let storyBoard: UIStoryboard = UIStoryboard(name: "NewUserLogin", bundle: nil)
      let newViewController = storyBoard.instantiateViewController(withIdentifier: "NewUser") as! NewUserRegistrationViewController
      self.present(newViewController, animated: true, completion: nil)
   }

最佳答案

要传递消息,您需要实现Delegate

protocol SecondViewControllerDelegate: NSObjectProtocol {
    func didUpdateData(controller: SecondViewController, data: YourDataModel)
}
//This is your Data Model and suppose it contain 'name', 'email', 'phoneNumber'
class YourDataModel: NSObject {
    var name: String? //
    var phoneNumber: String?
    var email: String?
}
class FirstViewController: UIViewController, SecondViewControllerDelegate {
    var data: YourDataModel?
    var nameTextField: UITextField?
    var phoneNumberTextField: UITextField?
    var emailTextField: UITextField?

    override func viewDidLoad() {
        super.viewDidLoad()
        callWebApi()
    }

    func callWebApi() {
        //After Success Fully Getting Data From Api
        //Set this data to your global object and then call setDataToTextField()
        //self.data = apiResponseData
        self.setDataToTextField()
    }

    func setDataToTextField() {
        self.nameTextField?.text = data?.name
        self.phoneNumberTextField?.text = data?.phoneNumber
        self.emailTextField?.text = data?.email
    }

    func openNextScreen() {
        let vc2 = SecondViewController()//Or initialize it from storyboard.instantiate method
        vc2.delegate = self//tell second vc to call didUpdateData of this class.
        self.navigationController?.pushViewController(vc2, animated: true)
    }

    //This didUpdateData method will call automatically from second view controller when the data is change
    func didUpdateData(controller: SecondViewController, data: YourDataModel) {

    }
}
class SecondViewController: UIViewController {
    var delegate: SecondViewControllerDelegate?

    func setThisData(d: YourDataModel) {
        self.navigationController?.popViewController(animated: true)
        //Right After Going Back tell your previous screen that data is updated.
        //To do this you need to call didUpdate method from the delegate object.
        if let del = self.delegate {
            del.didUpdateData(controller: self, data: d)
        }
    }
}

关于ios - ViewController将Swift从一个VC推到另一个VC然后返回,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52666193/

10-12 04:11