Search code examples
swifttableviewseguetextfield

pass data from tableviewcontroller to another tableviewcontroller in swift


I have a form I am creating

this form gets filled with textfields the user inputs. After answering all the questions a button pops up to save.

I am having a problem making this tableviewcontroller to pass the data to a new tableviewcontroller. I'm stuck and not sure how to go about this.

enter image description here

enter image description here

enter image description here

enter image description here

import UIKit

class TableViewController: UITableViewController, UITextFieldDelegate {

    @IBOutlet weak var saveBtn: UIButton!

    @IBOutlet var firstNameField: UITextField!
    @IBOutlet var middleNameField: UITextField!
    @IBOutlet weak var lastNameField: UITextField!
    @IBOutlet weak var addressField: UITextField!
    @IBOutlet weak var aptNumField: UITextField!
    @IBOutlet weak var cityField: UITextField!
    @IBOutlet weak var stateField: UITextField!
    @IBOutlet weak var zipField: UITextField!
    @IBOutlet weak var phoneOneField: UITextField!
    @IBOutlet weak var phoneTwoField: UITextField!
    @IBOutlet weak var allergiesField: UITextField!
    @IBOutlet weak var DobField: UILabel!
    @IBOutlet weak var sexField: UILabel!
    @IBOutlet weak var hospitalField: UITextField!
    @IBOutlet weak var doctorField: UITextField!

  override func viewDidLoad() {
        super.viewDidLoad()

        //Notifications to push datepicker
        NotificationCenter.default.addObserver(forName: .saveDateTime, object: nil, queue: OperationQueue.main) { (notification) in
            let dateVc = notification.object as! DatePopupViewController
            self.DobField.text = dateVc.formattedDate
        }

        //Notifications to push genderpicker
        NotificationCenter.default.addObserver(forName: .saveGender, object: nil, queue: OperationQueue.main) { (notification) in
            let genderVc = notification.object as! GenderPopupViewController
            self.sexField.text = genderVc.selectedGender
        }

                updateWidthsForLabels(labels: labels)
    }

    //Save Button Function
    func textFieldDidChange(_ textField: UITextField) {
        if textField == firstNameField || textField == lastNameField || textField == middleNameField || textField == addressField || textField == lastNameField || textField == cityField || textField == cityField || textField == stateField || textField == zipField || textField == phoneOneField || textField == phoneTwoField || textField == allergiesField {

            saveBtn.isHidden = true
        } else {
            saveBtn.isHidden = false
        }
    }

  @IBAction func saveBtnPressed(_ sender: Any) {


        performSegue(withIdentifier: "saveFirstPageSegue", sender: self)

}

}

Solution

  • what about starting creating a model:

    Form.swift

    struct Form {
        var firstname: String?
        var middlename: String?
       ....
        var doctor: String?
    
        init(firstname: String, middlename: String, ..., doctor: String) {
            self.firstname = firstname
            self.middlename = middlename
            ...
            self.doctor = doctor
        }
    
    }
    

    now you can create this form instance when saving and pushing the data to the new VC:

    yourCurrentForm.swift

    @IBAction func saveBtnPressed(_ sender: Any) {
        let formData = Form(firstname: firstNameField.text, middlename: middleNameField.text, ..., doctor: doctorField.text)
        let newVC = myNewViewController()
        newVC.form = formData
        self.navigationController?.pushViewController(newVC, animated: true)
    }
    

    NewViewController.swift

    class myNewViewController: UIViewController {
    
        var form: Form?
    
        .....
    
    }
    

    UPDATE:

    Here is the repo: https://github.com/FlorianLdt/LFEasyDelegate

    If you have some question just ask me

    Hope it helps.