Xcode 12.0 iOS 13+ UIViewController () проблема с viewWillDisappear ()

У меня есть простое приложение для флеш-карт, которое я написал для своего друга. Я в лучшем случае хобби. По сути, это Tinder, который можно перевернуть за мертвый язык. Все работало отлично до обновления iOS 13, в котором Apple переделала раскадровки для большей гибкости.

Моя проблема - это мое элегантное решение для сохранения пользовательских значений по умолчанию, когда выход из представления больше не вызывается. Этот контроллер представления carddeck вызывается при нажатии кнопки на другом экране. Чтобы выйти из того же самого контроллера представления, прежде чем вы нажмете кнопку, которая была привязана к шагу действия - покажите (не @IBAction), который вернет представление обратно в контроллер представления mainview. Я пробовал то же действие, переходя с модального текущего момента. но без кубиков.

class CardDeckViewController: UIViewController {

override func viewDidLoad() {
        super.viewDidLoad()
        // called!
}

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(true)
        // called!
}

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(true)
        // not called when "return" on this screen is pressed; 
        // however, it still returns to the main screen it just doesn't save the user's score
}

Любая помощь будет оценена. Я надеюсь, что есть более простое решение, чем переделывать всю раскадровку. Я вижу про UIModalPresentFullScreen. Я не гуру Swift, поэтому решил обратиться к профессионалам. Надеюсь, исправление займет слишком много времени. К счастью, я думаю, что это не влияет на другие представления, кроме одного.

Спасибо за прочтение!


person lil_matthew    schedule 23.09.2020    source источник


Ответы (2)


Вы можете попробовать следующее:

  1. Похоже, вы снова представляете контроллер основного представления. Трудно сказать, не видя вашего кода, но я думаю, вам, вероятно, следует уволить контроллер представления CardDeck, чтобы вернуться к контроллеру представления основного представления.

  2. Взгляните на UIAdaptivePresentationControllerDelegate. В этом сообщении stackoverflow рассматриваются изменения и решение iOS 13.

  3. У меня были похожие проблемы с изменением поведения жизненного цикла контроллера представления iOS 12 в iOS 13.

Я предлагаю рассмотреть возможность использования NotificationCenter, если ничего не работает. Вы транслируете из своего текущего контроллера представления, и кто-то вроде вашего AppDelegate может получить сообщение и действовать в соответствии с ним. Это не всегда лучший инструмент для работы, но он может помочь в определенных ситуациях.

  1. Не связано с вашим вопросом, но ваши вызовы super super.viewWillAppear(true), вероятно, должны быть super.viewWillAppear(animated), поэтому вы не игнорируете аргумент метода.
person Chris    schedule 24.09.2020
comment
Спасибо чувак! Да, при нажатии кнопки RETURN действие начинается с главного экрана. Главное представление определяется как: class MainViewController: UIViewController {...} Я посмотрю на ссылку SO и попробую. Я хочу, чтобы дизайн сохранялся как можно дольше. Это образовательное приложение, в котором все деньги (все 200 долларов в год) идут автору. Я хочу поддерживать его как можно реже, поэтому постараюсь сделать все правильно. - person lil_matthew; 24.09.2020
comment
Я видел эту ссылку: stackoverflow.com/questions / 56435510 / Я не знаю, как вставить этот фрагмент кода в свой проект. Все мои контроллеры просмотра работают в полноэкранном режиме. Программа представляет собой просто набор контроллеров пользовательского интерфейса, перемещающихся вперед и назад. Все объявлено UIViewController (). Будет ли фрагмент кода помещен в мое приложение? - person lil_matthew; 24.09.2020
comment
Похоже, вы уже разобрались с этим, но вы бы использовали этот фрагмент кода в любом контроллере представления представления, когда вы хотите, чтобы представленный контроллер представления отображался в полноэкранном режиме. - person Chris; 25.09.2020

Ответ был внизу этого вопроса:

Представление модального окна в полноэкранном режиме iOS 13

Мне просто пришлось переопределить свойство пользовательского интерфейса раскадровки с автоматического на полноэкранный.

person lil_matthew    schedule 24.09.2020