我如何将数据传递给childView

时间:2020-09-09 09:49:06

标签: ios swift iphone xcode

关于

我正在使用MXParallaxHeader开发ios应用。 我用它来创建类似Twitter的UI。 但是,当我转到MXScrollView页面时,我不知道如何将数据从MXScrollView传递到childViewController。

问题

如何将数据从MXScrollView传递给childViewController?

示例代码

PreviousViewController

//MXScrollViewController=ParentVC of MarkerInfoTabViewController
class PreviousViewController:UIViewController {
.
.
    @IBAction func goMXScrollView(_ sender: Any) {
        let nextView = self.storyboard?.instantiateViewController(withIdentifier: "MXScrollViewController") as! MXScrollViewController
        self.navigationController?.pushViewController(nextView, animated: true)
    }
}

childViewController

//MarkerInfoTabViewController(=childVC of MXScrollView)

import Tabman
import UIKit
import MXParallaxHeader

class MarkerInfoTabViewController: TabmanViewController {

    var marker:Marker!
    private var viewControllers = [UIViewController?]()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let leftView = self.storyboard?.instantiateViewController(withIdentifier: "MarkerInfoLeftViewController") as! MarkerInfoLeftViewController
        let rightView = self.storyboard?.instantiateViewController(withIdentifier: "MarkerInfoRightViewController") as! MarkerInfoRightViewController
        
        //↓I want to pass data here
        leftView.marker = marker

        viewControllers = [leftView, rightView]
        
        self.dataSource = self

        // Create bar
        let bar = TMBar.ButtonBar()
        bar.layout.transitionStyle = .snap // Customize

        // Add to view
        addBar(bar, dataSource: self, at: .top)
    }
}

我的应用图片

storyboard

segue to header

segue to childVC

参考

我的应用与this app大致相同。

1 个答案:

答案 0 :(得分:2)

只需在子控制器类中定义一个属性

class ChildViewController {
    var passedData: MY_DATA_TYPE
    ...

并在实例化之后进行设置

let nextView = self.storyboard?.instantiateViewController(withIdentifier: "ChildViewController") as! ChildViewController
nextView.passedData = MY_PASSED_DATA
self.navigationController?.pushViewController(nextView, animated: true)