私はVCのシリーズを持っています。navigationVCに埋め込まれrestaurantMenuTableVCがあります。ユーザがモーダル開かれるshoppingCartVCに項目を追加すると、私がプッシュする必要paymentVC(モーダル図示せず)にカートのアイテムの配列を送信する必要があります。それでは、私がやっていることは、ショッピングカートを棄却し、決済画面をプッシュしようとしているが、何も作業していないされています。ここで私が試したものです。
(簡単なデリゲートを使用して)方法1:私は、ショッピングカートを解任し、その後restaurantMenuVCセグエからpaymentVCへ:
@IBAction func didTapNext(_ sender: UIButton) {
dismiss(animated: true)
delegate?.payNow()
}
そしてmenuVC Iでデリゲート機能でこれを持っています:
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)
これは動作しますが、何のセグエがないので、私は配列を渡すことはできません。
それはモーダルpaymentVCを開くので、私は単にpaymentVCにshoppingCartVCからセグエすることはできません。それが何らかの理由で二回プッシュされますので、私はどちらかそれをプッシュすることはできません。それ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:)
呼び出されません。