如何快速将数据从View Controller传递到Container View

时间:2020-06-25 10:13:22

标签: ios swift alamofire

这是我的屏幕....

ow

我想将数据从Offline View Controller传递到InstantVC。我不知道该怎么做?。 基本上,我已经细分了Controller。当用户选项卡“即时”显示时,它将显示分段视图控制器,并隐藏“计划”视图控制器。并根据选择的分段传递数据。

这是离线视图控制器,用于传递数据


                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)


                }

这是Instant View控制器,可从Offline 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
    }

2 个答案:

答案 0 :(得分:0)

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

arr

然后您可以使用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

或者您可以在容器中具有函数...将ArrayOfOrder传递给该函数..这也会重新加载tableView

containerViewController?.arryOfOrder  = ArrayOfOrder

答案 1 :(得分:0)

如果您希望通过父类中发生的操作将数据从父对象传递给子对象,则可以使用以下方式访问当前UIViewController的子对象

children.forEach { (viewController) in
     if let temp = viewController as? InstantVC{
          temp.property = dataToPass
     }
}

仅当两个视图控制器始终都作为父级的子级保留并且永远都不会删除时,以上方法才有效。如果您将它们作为子项删除并在以后的阶段重新添加,则您将需要维护对该子项的引用并更新该引用,因为子项数组将没有该UIViewController。但是,由于您使用的是故事板,因此应该可以正常工作。

如果您想访问子类的活动数据,则可以使用以下方法访问父视图控制器:

let dataToUse = (parent as? OfflineVC).someProperty