代码之家  ›  专栏  ›  技术社区  ›  Blue Moose

将数据从tableviewcontroller传递到swift中的另一个tableviewcontroller

  •  2
  • Blue Moose  · 技术社区  · 8 年前

    我有一个我正在创建的表单

    此表单由用户输入的文本字段填充。回答完所有问题后,会弹出一个按钮进行保存。

    我在使此tableviewcontroller将数据传递给新的tableviewcontroller时遇到问题。我被困住了,不知道该怎么办。

    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)
    
    }
    
    }
    
    2 回复  |  直到 8 年前
        1
  •  1
  •   Florian Ldt    8 年前

    开始创建模型怎么样:

    类型敏捷的

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

    现在,您可以在保存数据并将其推送到新VC时创建此表单实例:

    您当前的表单。敏捷的

    @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。敏捷的

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

    更新:

    以下是回购协议: https://github.com/FlorianLdt/LFEasyDelegate

    如果你有什么问题就问我

    希望有帮助。

        2
  •  0
  •   iOS Geek    8 年前

    第一个选项-结构-首选

    使用结构:

    struct Manager
    {
     static var value : String = ""
    }
    

    Noe只需调用

    Manager.value = "newValue"
    

    在任何地方访问该值并将其分配给其他变量

    let newStr : String = Manager.value
    

    第二个选项-AppDelegate-不理想

    在AppDelegate中创建新对象

    enter image description here

    现在创建一个新对象以访问appDelegate

    let appDel = UIApplication.shared.delegate as! AppDelegate
    

    访问值并更新如下

    appDel.Frequency = 1.0
    

    第三个选项-NSObjectClass

    创建一个新的NSObject类,如下所示

    enter image description here

    //首次将NSObject类加载到内存堆栈中时创建的实例

    static let shared = wrapperClass()
    

    //创建要在对象类中全局访问的值

    var newValueInClass : String = ""
    

    现在是访问创建的对象的时候了

    wrapperClass.shared.newValueInClass = "iosGeek"
    

    现在在任何地方写这行

    print(wrapperClass.shared.newValueInClass)
    

    控制台输出

    enter image description here

    更好地使用结构类全局管理数据