首页 > 解决方案 > 如何快速将数据从视图控制器传递到容器视图

问题描述

这是我的屏幕......

哦

我想将数据从离线视图控制器传递到 InstantVC。我不知道该怎么做。基本上,我已经分段控制器。当用户选项卡 Instant 它显示分段视图控制器并隐藏调度视图控制器。并根据选定的分段传递数据。

这是传递数据的离线视图控制器


                switch response.result {

                case .success:
                    if let result = response.data {

                        do {

                            let resultIs = try JSONDecoder().decode(GetActiveOrderModel.self, from:result)
                            print("Massage:  \(resultIs.state)")
                            if let results = resultIs.orderData{
                                let storyboard = UIStoryboard(name: "Rider", bundle: nil)
                                let vc = storyboard.instantiateViewController(withIdentifier: "instantVC") as! InstantVC


                                print(" Order ID is  \(results.orderId)")
                                vc.arryOfOrder.append(results.orderId!)
//navigationController?.pushViewController(vc, animated: true)

                            }
                        } catch {
                            print(error)

                        }
                    }

                case .failure(let error):
                    print(error)


                }

这是来自离线 VC 的不稳定数据的即时视图控制器

var arryOfOrder = [Int]()
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
       
        print("---------->>>>>>>>> \(arryOfOrder)")
        
    }
    
    
    // MARK: - Custom Functions
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return arryOfOrder.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! CellForInstantVC
        
        
        
        cell.orderNum.text = "\(arryOfOrder[indexPath.row])"
        
        return cell
        
        
    }
    
    func addOrderNumber(orderNumber : Int){
        
        arryOfOrder.append(orderNumber)
        
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 120
    }

标签: iosswiftalamofire

解决方案


您可以使用 prepare Segue 访问 Container 控制器并保存其引用

class Master: UIViewController, ContainerToMaster {

@IBOutlet var containerView: UIView!

var containerViewController: Container?

@IBOutlet var labelMaster: UILabel!

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "containerViewSegue" {
        containerViewController = segue.destinationViewController as? Container
        
    }
}

然后你可以containerViewController用来传递数据

containerViewController?.arryOfOrder  = ArrayOfOrder

或者你可以在容器中有函数......将 ArrayOfOrder 传递给那个函数......这也将重新加载 tableView

containerViewController?.updateData(dataArray: ArrayOfOrder)

推荐阅读