У меня есть модальный контроллер вида, который выбирает пароль. Поскольку я не хочу, чтобы пароль записывался на диск, если мое приложение было прервано, я хочу узнать пароль на applicationWillResignActive
. (Для тех, кто может комментировать, я знаю, что безопасное текстовое поле не обнуляется).
Я попробовал следующий код, и мой контроллер вида никогда не находится. Для первого набора кода (UIView) я верю, потому что я смешиваю и сопоставляю представления и контроллеры представления. Я не уверен, почему второй набор кода (UIViewController) не работает, так как несколько человек предложили это.
Как можно перечислить контроллеры представления и найти интересующий контроллер? Я просто хочу отправить clearPassworAndPin
на PasswordPromptController
, если он присутствует (поскольку viewWillDisappear
не всегда отправляется, когда представление исчезает).
Модифицированный ответ 7KV7 и Jhaliya ниже (сработало). Оператор 'if' с использованием viewController.modalViewController
был выполнен 5 раз (один раз для каждого контроллера в представлении вкладок). Таким образом, один интересующий модальный контроллер был отправлен clearPasswords
сообщение 5 раз.
for (UIViewController * viewController in viewsControllers)
{
if ([viewController isKindOfClass:passwordPromptClass])
{
[(PasswordPromptController *)viewController clearPassworAndPin];
}
else
{
if(viewController.modalViewController)
[self clearPasswords:[NSArray arrayWithObjects:viewController.modalViewController, nil]];
}
}
Использование UIViews (без радости)
- (void)applicationWillResignActive:(UIApplication *)application
{
if(application.windows != nil)
[self clearPasswords:application.windows];
}
- (void)clearPasswords:(NSArray *)subviews
{
Class passwordPromptClass = [PasswordPromptController class];
for (UIView * subview in subviews)
{
if ([subview isKindOfClass:passwordPromptClass])
[(PasswordPromptController *)subview clearPassworAndPin];
}
}
Использование UIViewController (без радости)
- (void)applicationWillResignActive:(UIApplication *)application
{
if(tabBarController.viewControllers != nil)
[self clearPasswords:tabBarController.viewControllers];
}
- (void)clearPasswords:(NSArray *)viewsControllers
{
Class passwordPromptClass = [PasswordPromptController class];
for (UIViewController * viewController in viewsControllers)
{
if ([viewController isKindOfClass:passwordPromptClass])
[(PasswordPromptController *)viewController clearPassworAndPin];
}
}