Как отклонить 2 контроллера модального представления без странной анимации [дубликат]

Нужно будет узнать больше подробностей о вашем полном прецеденте.

Но, в общем, у вас есть два варианта:

(1) Вы можете использовать SODA Java. Это создаст коллекцию. Под обложками коллекция поддерживается обычной таблицей, которая будет иметь столбец идентификатора (для ключа) и столбец JSON_DOCUMENT для содержимого JSON (по умолчанию имена столбцов могут быть изменены по желанию через метаданные пользовательских коллекций, переданные createCollection). Эта базовая таблица таблиц также видима / доступна из SQL. По умолчанию JSON_DOCUMENT представляет собой BLOB, но через метаданные пользовательской коллекции вы можете запросить хранилище VARCHAR2 или CLOB. Это очень легко сделать в нескольких строках кода.

См. Пример для начала работы: https://github.com/oracle/soda-for-java/blob/master /doc/Getting-started-example.md

SODA в основном дает вам абстрагирование коллекций документов NoSQL, и с ним очень легко работать с Java. Это избавляет вас от необходимости кодировать SQL поверх JDBC и обрабатывать вещи низкого уровня, такие как переменные связывания и т. Д.

(2) Если SODA не является правильной абстракцией для вашего прецедента, вы можете использовать JSON поддержка в Oracle и JDBC (это именно то, что SODA использует под обложками). Вы должны создать обычную таблицу со столбцом для идентификатора и столбцом для JSON. При определении этой таблицы вы помещаете ограничение «is json» в столбец JSON. Столбец JSON может иметь тип BLOB (рекомендуется), VARCHAR2 или CLOB. С BLOB, в отличие от VARCHAR2, размер JSON не ограничивается 32k, а конверсии кодирования исключаются.

Затем вы связываете / извлекаете данные JSON, как обычно, с JDBC (точно так же, как обычно связывать / извлекать данные, отличные от JSON, в / из BLOB / VARCHAR2 / CLOB, ничего не меняется). Вы можете использовать различные JSON-операторы (json_value, json_table и т. Д.) В ваших SQL-запросах, которые вы выдаете через JDBC, чтобы работать со своими данными JSON.

1
задан rmaddy 19 January 2019 в 16:49
поделиться

2 ответа

Идея: вам нужно убрать третий контроллер с анимацией, а после сброса вам нужно убрать второй без анимации. Пока третий контроллер уволен, второй не должен быть виден.


Во-первых, установите Стиль представления контроллера второго представления на Over Current Context, когда вы его представляете (поскольку нам нужно будет скрыть его view, когда мы уволим третий контроллер) [ 1114]

let vc2 = VC2()
vc2.modalPresentationStyle = .overCurrentContext
present(vc2, animated: true)

продолжаем создавать свойства обратных вызовов для willDismiss и didDismiss внутри третьего контроллера. Этот обратный вызов будет вызываться до и после того, как вы отключите третий контроллер

class VC3: UIViewController {

    var willDismiss: (() -> Void)?
    var didDismiss:  (() -> Void)?

    @IBAction func dismissButtonPressed(_ sender: UIButton) {

        willDismiss?()

        dismiss(animated: true) {
            self.didDismiss?()
        }
    }

}

, а затем во втором контроллере представления в том месте, где вы представляете третий контроллер представления, установите свойства обратного вызова третьего контроллера: объявите, что происходит, когда третий контроллер отклонит : вам нужно скрыть представление секунды, а затем после удаления третьей вам нужно удалить секунду без анимации (view может оставаться скрытым, поскольку контроллер представления будет деинициализирован)

class VC2: UIViewController {

    @objc func buttonPressed(_ sender: UIButton) {

        var vc3 = VC3()

        vc3.willDismiss = {
            self.view.isHidden = true
        }

        vc3.didDismiss = {
            self.dismiss(animated: false)
        }

        present(vc3, animated: true)
    }

}

[ 1112] enter image description here


В любом случае, второй вариант использует UINavigationController, а затем просто вызывает его метод popToViewController(_:animated:).

0
ответ дан Robert Dresler 19 January 2019 в 16:49
поделиться

Используйте это в методе действия кнопки. Текущий VC будет отклонен, когда вы отклоните родительский VC. Это позволит отклонить оба VC в одной анимации.

self.presentingViewController?.presentingViewController?.dismiss(animated: true, completion: nil)

0
ответ дан Raghav Ahuja 19 January 2019 в 16:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: