Как отклонить UIActionSheets и UIPopoverControllers, не зная, кто их представил - PullRequest
3 голосов
/ 14 июля 2011

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

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

Чтобы решить эту проблему, я могу подумать о создании всех листов действий и всплывающих окон, сохраняющих элементы моих контроллеров представления, а затем об их отклонении в методах viewWillDisappearих владельцев.Но у меня так много контроллеров представления, поэтому я ищу другие пути, если они есть.

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

Ответы [ 2 ]

2 голосов
/ 19 ноября 2011

Я бы зарегистрировал экземпляр UIPopover, чтобы прослушать какое-то уведомление.

[[NSNotificationCenter defaultCenter] addObserver:_myPopOver 
                                         selector:@selector(myDismissPopover)
                                             name:@"dismissPopover" 
                                           object:nil];

И добавьте расширение к классу UIPopover.

- (void) myDismissPopover {
 [self dismissPopoverAnimated:YES];
}

Когда мне нужно отклонить popover, мне просто нужно опубликовать уведомление.

[[NSNotificationCenter defaultCenter] postNotificationName:@"dismissPopover" 
                                                    object:nil];
1 голос
/ 16 июля 2011

Я запишу свое собственное решение, как мы говорили с bshirley в комментариях к вопросу. Я реализовал такой механизм, чтобы решить эту проблему:

В моем контроллере представления входа в систему я создаю NSMutableArray, в котором будут храниться все мои листы действий и контроллеры popover, которые будут отклонены. Затем я храню этот массив в глобальном словаре. Я получаю доступ к этому словарю с помощью служебного метода. Затем во всем приложении, кто бы ни создавал лист действий или контроллер всплывающих окон, добавляет компонент в этот массив (извлекает массив из глобальных данных, модифицирует его и затем сохраняет его обратно в глобальные данные). Затем, когда пользователь возвращается к экрану входа в систему, в viewWillDisappear моего контроллера представления входа в систему я зацикливаюсь на этом массиве и вызываю соответствующий метод dismiss, проверяя, является ли UIView, который я получаю из массива, листом действий или контроллером popover. Затем я удаляю все элементы этого массива и снова сохраняю его в глобальных данных.

Надеюсь, это поможет любому, кому нужно внедрить подобный механизм. Ваши комментарии будут оценены.

...