如何快速将数据从视图控制器传递到容器视图
Posted
技术标签:
【中文标题】如何快速将数据从视图控制器传递到容器视图【英文标题】:How to pass data from View Controller to Container View in swift 【发布时间】:2020-06-25 10:13:22 【问题描述】:这是我的屏幕......
我想将数据从离线视图控制器传递到 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
【问题讨论】:
【参考方案1】:您可以使用 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)
【讨论】:
【参考方案2】:如果您想将父类中发生的操作的数据从父级传递给子级,您可以使用访问当前UIViewController
的子级
children.forEach (viewController) in
if let temp = viewController as? InstantVC
temp.property = dataToPass
仅当您的两个视图控制器始终作为父级的子级并且永远不会被删除时,上述内容才有效。如果您将它们作为子元素删除并在稍后阶段重新添加它们,您将需要维护对子元素的引用并更新该引用,因为子数组不会有 UIViewController
。但由于您使用的是情节提要,这应该可以正常工作。
如果您想通过子类的操作访问数据,您可以使用以下方式访问父视图控制器:
let dataToUse = (parent as? OfflineVC).someProperty
【讨论】:
以上是关于如何快速将数据从视图控制器传递到容器视图的主要内容,如果未能解决你的问题,请参考以下文章