どのように私はセグエせずに配列を渡していますか?

BVB09:

私は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)

手動で呼び出すとpushViewControllerprepare(for:sender:)呼び出されません。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=406821&siteId=1