swift - 如何在没有 segue 的情况下传递数组?
问题描述
我有一系列的风险投资。有一个嵌入在 navigationVC 中的 restaurantMenuTableVC。当用户将商品添加到以模态方式打开的 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:)
不会调用 。
推荐阅读
- docker - Docker --device 与 docker run 中的 -v
- python - AttributeError: 'NoneType' 对象没有属性 'lower'。对于 django-comments-dab 应用程序
- spring-cloud-dataflow - 在 Spring CLoud Dataflow Dashboard 的任务执行屏幕中单击查看日志按钮时出错
- mysql - 无法访问 AWS lightsail 上的 MYSQL 数据库
- java - 如何正确使用 Matcher 检索字符串的前 30 个字符?
- javascript - Xstate 无法设置未定义的属性“_sessionid”
- bash - Bash:提取出现多次的两个字符之间的文本
- python-3.x - 从 SFTP 服务器读取 json 文件时,我以字节格式获取数据,其中包含单引号和双引号。如何在 python 中转换为 str
- flutter - 带有嵌套小部件的 Flutter 表单验证
- azure-active-directory - Sharepoint Online OAuth 2.0 新 O365 租户的无效令牌类型