如何从父视图控制器快速访问容器视图中的数据?

问题描述 投票:0回答:2

我有一个视图控制器(SignUpController),它在顶部有1个图像视图,在底部有2个按钮,还有1个视图为container view。容器视图(InfoRegisterController)包含带有几个文本字段的scrollview。容器视图不包含任何按钮。因此,现在我需要在父视图控制器中访问“容器”视图的文本字段(或者可以说:我需要从容器视图访问父视图控制器的所有数据),以便可以通过单击“注册”按钮来注册用户。 SignUpController中的底部。我也无法通过代表和NSUserDefaults解决此问题。因此,请帮助我迅速解决此问题4?

这是父视图控制器:

import UIKit
import Material

class SignUpController: UIViewController {  


@IBOutlet weak var backgroundView: UIView!

@IBOutlet weak var register: UIButton!

override func viewDidLoad() {
    super.viewDidLoad()

    backgroundView.layer.borderWidth = 1
    backgroundView.layer.borderColor = UIColor.blue.cgColor
    register.layer.cornerRadius = 5 

    // Do any additional setup after loading the view.
}
override func viewWillAppear(_ animated: Bool) {

    super.viewWillAppear(animated) // No need for semicolon

    let tv: InfoRegisterController = self.childViewControllers[0] as!InfoRegisterController

    print("Hello")
     //tv.viewWillAppear(true) 
 }

必须将所有数据访问此位置,以便我可以将其发布到服务器。

@IBAction func Register(_ sender: Any) {




    }
} // class end

容器视图:

import UIKit
import Material

class InfoRegisterController: UIViewController, UITextFieldDelegate,  UITableViewDelegate,UITableViewDataSource,UIImagePickerControllerDelegate,UINavigationControllerDelegate {

@IBOutlet weak var fullName: TextField!
@IBOutlet weak var Email: ErrorTextField!
@IBOutlet weak var Password: TextField!
@IBOutlet weak var verifyPassword: TextField!
@IBOutlet weak var address: TextField!
@IBOutlet weak var permanentAddress: TextField!
@IBOutlet weak var currentAddress: TextField!
@IBOutlet weak var DOB: TextField!
@IBOutlet weak var occupation: TextField!
@IBOutlet weak var selectGender: TextField!
@IBOutlet weak var identificationType: TextField!
@IBOutlet weak var identificationID: TextField!
@IBOutlet weak var issuedDate: TextField!
@IBOutlet weak var issuedDistrict: TextField!
@IBOutlet weak var licenseNumber: TextField!
@IBOutlet weak var fathersName: TextField!
@IBOutlet weak var grandfathersName: TextField!
@IBOutlet weak var mobileNumber: TextField!

override func viewDidLoad() {
    super.viewDidLoad()

    self.fullName.delegate = self
    self.Email.delegate = self
    self.Password.delegate = self
    self.verifyPassword.delegate = self
    self.address.delegate = self
    self.permanentAddress.delegate = self
    self.currentAddress.delegate = self
    self.DOB.delegate = self
    self.occupation.delegate = self
    self.identificationID.delegate = self
    self.issuedDate.delegate = self
    self.issuedDistrict.delegate = self
    self.licenseNumber.delegate = self
    self.fathersName.delegate = self
    self.grandfathersName.delegate = self
    self.mobileNumber.delegate = self

    }  
}

这里,我需要访问SignUpController的所有字段fullName,Email,Password,verifyPassword,地址,permanentAddress,currentAddress,DOB,occupation和所有其他字段,以便我可以注册新用户。

ios swift uicontainerview
2个回答
3
投票

要从父级访问容器视图,您必须将引用从容器视图传递给父级,然后在父级视图控制器中使用它,有很多方法可以做到这一点,这是其中一种。

在作为容器视图控制器的viewDidAppearInfoRegisterController中添加以下代码,此方法会将InfoRegisterController的引用获取到要使用的父级中。

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    let signUpControllerParent = self.parent as! SignUpController
    signUpControllerParent.saveContrainerViewRefference(vc: self)

}

现在SignUpController中添加本地变量,以保存即将到来的引用,以供以后从文本字段中获取数据。

var infoRegisterRefferenceVC : InfoRegisterController?

[也在您的父母SignUpController中也添加此方法

func saveContrainerViewRefference(vc:InfoRegisterController){

    self.infoRegisterRefferenceVC = vc

}

例如,现在您可以从父级访问容器视图中的所有文本字段和方法:

var fullNameTextField = self.infoRegisterRefferenceVC.fullName.text 

应该是:)


0
投票

有几种方法可以完成此操作。您可以在父视图控制器中使用“代理”和“协议”或prepareForSegue方法。

var somePropertyYouWantToAccess: NSString?
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

  if segue.identifier == "yourChildViewSegueIdentifier" {
       let childVc = segue.destinationViewController as ContainerViewController
        self.somePropertyYouWantToAccess = childVc.firstName
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.