You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS开发:如何将数据从MXScrollView传递到子视图控制器

解决MXScrollView向子视图控制器传递数据的问题

我来帮你搞定这个数据传递的事儿,其实逻辑很简单,就是分两步走:先把数据传到MXScrollViewController,再由它把数据接力给子控制器MarkerInfoTabViewController。下面是具体的实现步骤:

1. 给MXScrollViewController添加数据接收属性

首先,你需要在MXScrollViewController里添加一个和子控制器类型一致的marker属性,用来接收从PreviousViewController传过来的数据,然后再转递给子控制器。

class MXScrollViewController: UIViewController {
    // 添加marker属性,类型和子控制器保持一致
    var marker: Marker!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 找到子控制器MarkerInfoTabViewController的实例
        if let markerTabVC = self.childViewControllers.first(where: { $0 is MarkerInfoTabViewController }) as? MarkerInfoTabViewController {
            // 将传递过来的marker赋值给子控制器的marker属性
            markerTabVC.marker = self.marker
        }
    }
}

2. 在PreviousViewController中传递数据到MXScrollViewController

修改你跳转页面的代码,在push之前把要传递的marker对象赋值给MXScrollViewController的属性:

class PreviousViewController:UIViewController {
...
@IBAction func goMXScrollView(_ sender: Any) {
    let nextView = self.storyboard?.instantiateViewController(withIdentifier: "MXScrollViewController") as! MXScrollViewController
    
    // 这里替换成你实际要传递的marker对象
    nextView.marker = yourTargetMarker
    
    self.navigationController?.pushViewController(nextView, animated: true)
}
}

3. 确保MarkerInfoTabViewController正常接收并传递数据

你原来在MarkerInfoTabViewController里的代码已经写了把marker传递给它的子控制器(leftView和rightView),只要marker属性被正确赋值,这部分就能正常工作。如果需要的话,也别忘了给rightView赋值:

override func viewDidLoad() {
    super.viewDidLoad()
    let leftView = self.storyboard?.instantiateViewController(withIdentifier: "MarkerInfoLeftViewController") as! MarkerInfoLeftViewController
    let rightView = self.storyboard?.instantiateViewController(withIdentifier: "MarkerInfoRightViewController") as! MarkerInfoRightViewController
    
    // 这里的marker已经从MXScrollViewController传过来了
    leftView.marker = marker
    rightView.marker = marker // 可选:如果rightView也需要这个数据的话
    
    viewControllers = [leftView, rightView]
    self.dataSource = self
    // 创建bar
    let bar = TMBar.ButtonBar()
    bar.layout.transitionStyle = .snap
    // 自定义设置
    // 添加到视图
    addBar(bar, dataSource: self, at: .top)
}

补充说明

  • 如果你的MXScrollViewController是通过代码手动创建MarkerInfoTabViewController,那可以在创建子控制器的时候直接赋值marker属性,不用通过childViewControllers查找,这样更直接。
  • 确保Marker类是可以被正确传递的(比如遵守必要的协议,或者是值类型/引用类型符合你的需求)。

内容的提问来源于stack exchange,提问作者Carabinieri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 08:02:48