如何在没有 segue 的情况下传递数组?
How do I pass an array without a segue?
我有一系列的 VC。有一个 restaurantMenuTableVC 嵌入在 navigationVC 中。当用户将项目添加到以模态方式打开的 shoppingCartVC 中时,我需要将购物车项目数组发送到需要推送的 paymentVC(未以模态方式显示)。所以我正在做的是关闭购物车并尝试推动支付屏幕,但没有任何效果。这是我尝试过的:
方法 1(使用简单委托):我关闭购物车,然后从 restaurantMenuVC 转至 paymentVC:
@IBAction func didTapNext(_ sender: UIButton) {
dismiss(animated: true)
delegate?.payNow()
}
在 menuVC 的委托函数中我有这个:
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let paymentViewController = segue.destination as? PaymentViewController {
paymentViewController.cartItemArray = self.cartItemArray
}
}
发生的只是购物车模式被关闭但 paymentVC 没有打开。
方法2:在委托函数中,我有这个:
let paymentViewController = self.storyboard?.instantiateViewController(identifier: "PaymentViewController") as? PaymentViewController
self.navigationController?.pushViewController(paymentViewController!, animated: true)
这可行,但我无法传递数组,因为没有 segue。
我不能简单地从 shoppingCartVC 转到 paymentVC,因为它以模态方式打开 paymentVC。我也不能推它,因为它会因为某种原因被推两次。它的 UX 需要关闭 shoppingCartVC,然后过渡到 paymentVC。
我该怎么办?
如果你想在关闭另一个场景后呈现一个场景,请使用 dismiss
的完成处理程序:
dismiss(animated: true) {
delegate?.payNow()
}
顺便说一句,如果你想在手动推送时传递数据,请在实例化视图控制器之后,推送之前设置值:
paymentViewController = storyboard!.instantiateViewController(identifier: "PaymentViewController") as! PaymentViewController
paymentViewController.property = ...
navigationController?.pushViewController(paymentViewController, animated: true)
当您手动调用 pushViewController
时,不会调用 prepare(for:sender:)
。
我有一系列的 VC。有一个 restaurantMenuTableVC 嵌入在 navigationVC 中。当用户将项目添加到以模态方式打开的 shoppingCartVC 中时,我需要将购物车项目数组发送到需要推送的 paymentVC(未以模态方式显示)。所以我正在做的是关闭购物车并尝试推动支付屏幕,但没有任何效果。这是我尝试过的:
方法 1(使用简单委托):我关闭购物车,然后从 restaurantMenuVC 转至 paymentVC:
@IBAction func didTapNext(_ sender: UIButton) {
dismiss(animated: true)
delegate?.payNow()
}
在 menuVC 的委托函数中我有这个:
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let paymentViewController = segue.destination as? PaymentViewController {
paymentViewController.cartItemArray = self.cartItemArray
}
}
发生的只是购物车模式被关闭但 paymentVC 没有打开。
方法2:在委托函数中,我有这个:
let paymentViewController = self.storyboard?.instantiateViewController(identifier: "PaymentViewController") as? PaymentViewController
self.navigationController?.pushViewController(paymentViewController!, animated: true)
这可行,但我无法传递数组,因为没有 segue。
我不能简单地从 shoppingCartVC 转到 paymentVC,因为它以模态方式打开 paymentVC。我也不能推它,因为它会因为某种原因被推两次。它的 UX 需要关闭 shoppingCartVC,然后过渡到 paymentVC。
我该怎么办?
如果你想在关闭另一个场景后呈现一个场景,请使用 dismiss
的完成处理程序:
dismiss(animated: true) {
delegate?.payNow()
}
顺便说一句,如果你想在手动推送时传递数据,请在实例化视图控制器之后,推送之前设置值:
paymentViewController = storyboard!.instantiateViewController(identifier: "PaymentViewController") as! PaymentViewController
paymentViewController.property = ...
navigationController?.pushViewController(paymentViewController, animated: true)
当您手动调用 pushViewController
时,不会调用 prepare(for:sender:)
。