Отклонить порожденные дочерние представления UIActivityViewController

Я использую UIActivityViewController. Когда пользователь отправляет мое приложение в фоновый режим на iPhone (когда он нажимает кнопку «Домой» и т. д.), мне нужно удалить порожденный UIActivityViewController и любые дочерние элементы, которые могли появиться из него. Это означает, что если пользователь выбирает параметр «Почта» или «Сообщение» в UIActivityViewController, мне нужно удалить представление (контроллер представления?), которое появляется в результате этого действия.

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

[_myActivityController dismissViewControllerAnimated:NO completion:nil];

person Master Crouch    schedule 29.03.2016    source источник


Ответы (1)


Попробуйте это в своем приложении appDelegate applicationDidEnterBackground. Отклоните самый верхний представленный контроллер представления. Надеюсь, это поможет вам.

- (void)applicationDidEnterBackground:(UIApplication *)application {

    UIViewController *mytopController = [UIApplication sharedApplication].keyWindow.rootViewController;
    while (mytopController.presentedViewController)
    {
        mytopController = mytopController.presentedViewController;
        [mytopController dismissViewControllerAnimated:NO completion:nil];
    }

}
person Raj Tandel    schedule 29.03.2016
comment
Это работает. Я был удивлен, что это не удалило мой корневой контроллер представления. Я предполагаю, что корневой контроллер указывает на UIActivityViewController или его дочерний элемент через свойство presentViewController, и именно так вам удалось удалить этот элемент. В любом случае хорошая вещь. - person Master Crouch; 29.03.2016
comment
ПРИМЕЧАНИЕ. Это решение не удаляет все элементы, если пользователь нажимает больше в UIActivityViewController. Чтобы правильно удалить все элементы, удалите mytopController = mytopController.presentedViewController; и замените [mytopController dismissViewControllerAnimated:NO completion:nil]; на [mytopController.presentedViewController dismissViewControllerAnimated:NO completion:nil];. - person Master Crouch; 30.03.2016