IOS 5: -viewWillAppear не вызывается после отклонения модального iPad
Я представляю модальный код с помощью следующего кода:
AddName *add = [[AddName alloc] initWithNibName:@"AddName" bundle:nil]
add.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentModalView:add animated:YES];
И после моей работы я использую следующий код, чтобы вернуться к основному виду.
[self dismissModalViewControllerAnimated:YES];
Поэтому он используется для вызова -viewWillAppear
по умолчанию.
Моя проблема в том, что
Он отлично работал с iOS4.3.
Но он не работает с iOS5.
Что мне делать? Или это ошибка в iOS5?
Ответы
Ответ 1
-viewWillAppear
гарантируется только в тех местах, где также был вызван -viewWillDisappear
. Для большинства модальных окон на iPad это не так, поскольку они не скрывают всю страницу.
Решение вашей проблемы будет зависеть от того, что вам нужно для -viewWillAppear
, но в общем случае вам, скорее всего, нужно будет позвонить напрямую из того же места, где вы отклоните контроллер модального представления.
Одним из распространенных механизмов для этого, особенно в тех случаях, когда вы можете использовать тот же вид модальности в другом месте, является предоставление модульному контроллеру представления делегата, который вызывается, когда представление вот-вот исчезнет. Это даст вам возможность принимать ответы из модального окна или даже просто принудительно перезагрузить данные в представлении делегата.
Надеюсь, что это поможет.
Ответ 2
iOS 5 определенно изменил свои вызовы на viewWillAppear
и viewWillDisappear
. Например, subviews (View Controller views
в качестве подзадач, чтобы быть точным) в UIScrollView
, viewWillDisappear
вызывается, когда вы нажимаете другой контроллер представления в стек. Однако, когда контроллер вида вызывается, viewWillAppear
не вызывается. Эти методы никогда не вызывались в iOS 4 на UIScrollView
subviews.
Это странное поведение для меня. Поделитесь этим тем, что независимо от того, что должно произойти, если вы можете положиться на это в iOS 4, он не должен работать по-разному в iOS 5. В большинстве случаев я понятия не имею, в каком конкретном случае каждый вызов, Я обычно тестирую и ошибаюсь, поскольку я в кодировке зоны. Если он работает так, как мне нравится, я продолжаю. Затем iOS 5 входит и бросает крутой мяч во все.
Я также испытал, когда представление UINavigationController's
является подвью, а ViewController
помещается в стек контроллера навигатора, viewWillAppear
никогда не вызывается в iOS 4, но вызывает вызов в iOS 5. Go figure,
Ответ 3
У меня была та же проблема.
Я обнаружил, что viewWillAppear
не вызывается после отклонения модальности, но viewDidAppear
есть. Поэтому просто попробуйте viewDidAppear
.