¿Cómo puedo pasar una matriz sin segue?

BvB09:

Tengo una serie de VC. Hay una restaurantMenuTableVC que está incrustado en un navigationVC. Cuando el usuario agrega un elemento en la shoppingCartVC que se abre de forma modal, necesito enviar el conjunto de la cesta elementos a la paymentVC que necesita ser empujado (no se muestra de forma modal). Así que lo que estoy haciendo es que se desestima el carrito de compras y tratar de empujar la pantalla de pago, pero nada funciona. Esto es lo que he intentado:

Método 1 (utilizando un delegado sencilla): Me olvido de la cesta de la compra y luego desde el segue restaurantMenuVC a la paymentVC:

@IBAction func didTapNext(_ sender: UIButton) {

        dismiss(animated: true)
        delegate?.payNow()
}

Y en la función de delegado en menuVC tengo esto:

func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            if let paymentViewController = segue.destination as? PaymentViewController {
                paymentViewController.cartItemArray = self.cartItemArray
            }
        }

Bueno, todo lo que sucede es que el carrito de la compra modal es despedido, pero paymentVC no se abre.

Método 2: En la función de delegado, tengo esto:

let paymentViewController = self.storyboard?.instantiateViewController(identifier: "PaymentViewController") as? PaymentViewController
        self.navigationController?.pushViewController(paymentViewController!, animated: true)

Esto funciona, pero no puedo pasar la matriz porque no hay segue.

No puedo simplemente ramificarse desde el shoppingCartVC a la paymentVC porque abre la paymentVC de forma modal. No puedo empujarlo ya sea porque entonces es empujado dos veces por alguna razón. Se UX necesidades para cerrar la shoppingCartVC y luego paso a la paymentVC.

¿Qué debo hacer?

Rob:

Si desea presentar una escena después de despedir otro, utilice el controlador de la finalización de dismiss:

dismiss(animated: true) {
    delegate?.payNow()
}

Por cierto, si quieres pasar datos al empujar manualmente, ajuste el valor después de crear una instancia del controlador de vista, pero antes de que lo empuje:

paymentViewController = storyboard!.instantiateViewController(identifier: "PaymentViewController") as! PaymentViewController
paymentViewController.property = ...
navigationController?.pushViewController(paymentViewController, animated: true)

Cuando se llama de forma manual pushViewController, el prepare(for:sender:)que no se llama.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=406824&siteId=1
Recomendado
Clasificación