iOS 5: -viewWillAppear не вызывается после закрытия модала в iPad - PullRequest
24 голосов
/ 18 октября 2011

Я представляю модал, используя следующий код:

AddName *add = [[AddName alloc] initWithNibName:@"AddName" bundle:nil]
add.modalPresentationStyle = UIModalPresentationFormSheet;

[self presentModalView:add animated:YES];

И после своей работы я использую следующий код, чтобы вернуться к моему основному виду.

[self dismissModalViewControllerAnimated:YES];

Поэтому он используется дляпо умолчанию -viewWillAppear.

Моя проблема в том, что

С iOS4.3 все работало нормально.

Но это не работает с iOS5 .

Что мне делать?Или это какая-то ошибка в iOS5 ?

Ответы [ 3 ]

11 голосов
/ 25 октября 2011

-viewWillAppear гарантированно вызывается только в тех местах, где -viewWillDisappear также был вызван. Для большинства модальных окон на iPad это не так, поскольку они не затеняют всю страницу.

Решение вашей проблемы будет зависеть от того, для чего вам нужен -viewWillAppear, но в целом вам, скорее всего, нужно будет сделать вызов непосредственно из того же места, где вы отключили контроллер модального представления.

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

Надеюсь, это поможет.

9 голосов
/ 09 ноября 2011

iOS 5 определенно изменила свои звонки на viewWillAppear и viewWillDisappear.Например, подпредставления (View Controller's views как точные подпредставления) в UIScrollView, viewWillDisappear будут вызываться, когда вы помещаете другой контроллер представления в стек.Однако, когда контроллер представления активирован, viewWillAppear не вызывается.Эти методы никогда не вызывались в iOS 4 для UIScrollView подпредставлений.

Это странное поведение для меня.Соедините это с тем фактом, что независимо от того, что должно произойти, если бы вы могли рассчитывать на то, что это происходит в iOS 4, в iOS 5 это не должно работать по-другому. В большинстве случаев я понятия не имею, в каком конкретном случае каждый из них называетсяЯ обычно проб и ошибок, так как я нахожусь в зоне кодирования.Если это работает так, как мне нравится, я иду дальше.Тогда iOS 5 входит и бросает разрушительный шар во все.

Я также испытывал, когда представление UINavigationController's является подпредставлением, и ViewController помещается в стек контроллера навигации, viewWillAppear никогда не вызывается в iOS 4, но вызывается в iOS 5Пойди разберись.

2 голосов
/ 04 июля 2014

У меня была такая же проблема. Я обнаружил, что viewWillAppear не вызывается после отклонения модального режима, но viewDidAppear есть. Так что просто попробуйте viewDidAppear.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...