Контроллер просмотра не отключается должным образом

#ios #swift

#iOS #swift

Вопрос:

Я нахожусь в процессе реализации кнопки отмены для одного из моих контроллеров просмотра. Этот контроллер представления может быть либо показан, либо представлен модально. Кнопка отмены отлично работает, когда показан контроллер просмотра, но она не оказывает никакого эффекта, когда VC был представлен модально. У меня есть строка кода для моей кнопки отмены:

 let isPresentingInAddRoutineMode = presentingViewController is UINavigationController
  

Предполагается, что эта строка кода определяет, был ли VC показан или представлен. Я получил строку с веб-сайта Apple development. Затем в функции отмены он читает:

 if isPresentingInAddRoutineMode {
        dismiss(animated: true, completion: nil)
    }
  

Согласно веб-сайту, переменная должна иметь значение true, поскольку VC был представлен модально (переход в раскадровке гласит, что присутствует модально). Я попытался выполнить отладку, чтобы увидеть, возвращает ли логическое значение true, но это не так. Я очень смущен этим и был бы очень признателен, если бы у кого-нибудь были какие-либо идеи, что я здесь сделал не так.

Спасибо.

Комментарии:

1. «Предполагается, что эта строка кода определяет, был ли VC показан или представлен» — нет, эта строка кода проверяет, является ли presentingViewController навигационный контроллер или нет.

2. @rmaddy Извините, что я плохо объяснил. Кнопка, которая модально отображает контроллер просмотра, встроена в навигационный контроллер, поэтому строка кода определяет, был ли текущий просмотр доставлен через навигационный контроллер (модально) или с помощью другой кнопки (показано).

Ответ №1:

Возможно, это могло бы быть полезно вместо: isBeingPresented

От:https://developer.apple.com/documentation/uikit/uiviewcontroller/2097564-isbeingpresented

Комментарии:

1. Хорошо, я попробовал это в функции кнопки отмены. Отладчик возвращает false. Знаете ли вы, почему он выдает false, когда контроллер просмотра отображается на экране?

2. isBeingPresented может использоваться только одним из view[Will|Did][Disa|A]ppear методов.