将值从容器视图传递到父视图控制器

Gee*_*ddy 4 ios uicontainerview swift3.2

我是新手,我想将一个数组从我的容器视图传递到父视图。我已经使用情节提要创建了容器视图,但是容器视图以编程方式出现和消失,如下所示:

//in parent view controller, inside viewDidLoad()
CameraView.isHidden  = true

//in child view controller, on click of button,
let parent = self.parent as! DiaryEntryViewController
parent.CameraView.isHidden  = true
Run Code Online (Sandbox Code Playgroud)

我希望选择的数据在单击按钮以显示容器视图时显示。我不知道如何将值从子视图控制器传递到父视图控制器,我应该在哪里可以访问这些值。这些值需要在一个函数中访问,该函数在单击父视图控制器中的另一个按钮时就会调用。

Suc*_*ija 6

步骤来做到这一点。

  1. 您的容器视图必须包含一个嵌入到子视图控制器的序列,其名称可以像这样进行序列...。“ homeToContainer”(请参阅​​所附图像) 添加嵌入的名称

  2. 将此方法添加到您的父视图控制器(DiaryEntryViewController)

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            if let vc = segue.destination as? ChildViewController,
                segue.identifier == "homeToContainer" {
                vc.delegate = self
            }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在ChildViewController中添加协议及其变量

        protocol ChildToParentProtocol:class {
    
    
            func buttonClickedByUser()
            func needToPassInfoToParent(with value:Int)
    
        }
    
    
        class ChildViewController: UIViewController {
    
            weak var delegate:ChildToParentProtocol? = nil
    
            @IBAction func createTourPressed(_ sender: UIButton) {
                // Call here delegate methods to tell parent about the action
                delegate?.buttonClickedByUser()
    
            }
    
        }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 在父级ViewController的最后一个中,添加此扩展,扩展DiaryEntryViewController:ChildToParentProtocol {

                func buttonClickedByUser() {
    
                }
                func needToPassInfoToParent(with value:Int) {
    
    
                }
            }
    
    Run Code Online (Sandbox Code Playgroud)