Как передать массив без перехода? - PullRequest
1 голос
/ 04 апреля 2020

У меня есть серия ВК. Есть ресторан MenuTableV C, который встроен в навигацию V C. Когда пользователь добавляет элемент в shoppingCartV C, который открывается модально, мне нужно отправить массив элементов корзины на платеж V C, который необходимо нажать (не показано модально). Так что я делаю, отклоняю корзину для покупок и пытаюсь вывести sh экран оплаты, но ничего не работает. Вот что я попробовал:

Способ 1 (с использованием простого делегата): я отклоняю корзину для покупок и затем из ресторанаMenuV C перехожу к платежу V C:

@IBAction func didTapNext(_ sender: UIButton) {

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

И в функции делегата в меню V C у меня есть это:

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

Ну, все, что происходит, это то, что модальная корзина покупок отклоняется, но оплата V C не открывается.

Метод 2: В функции делегата у меня есть это:

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

Это работает, но я не могу передать массив, потому что нет перехода.

Я не могу просто перейти от shoppingCartV C к платежу C, потому что он открывает платеж C модально. Я тоже не могу это сделать, потому что тогда его почему-то толкают дважды. Это UX нужно закрыть ShoppingCartV C и затем перейти на платеж V C.

Что мне делать?

1 Ответ

1 голос
/ 04 апреля 2020

Если вы хотите представить сцену после отклонения другой, используйте обработчик завершения dismiss:

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

Кстати, если вы хотите передавать данные при ручном нажатии, установите значение после создания экземпляра контроллер представления, но перед вами pu sh it:

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

Когда вы вручную вызываете pushViewController, prepare(for:sender:) не вызывается.

...