Не удается отключить предупреждения программно в Ma c Catalyst? - PullRequest
0 голосов
/ 29 февраля 2020

Я показываю предупреждение как это:

self.connectingAlert = [UIAlertController
    alertControllerWithTitle:@""
    message:NSLocalizedString(@"CONNECTING", nil)
    preferredStyle:UIAlertControllerStyleAlert];
[self.connectingAlert addAction:[UIAlertAction
    actionWithTitle:NSLocalizedString(@"BUTTON_CANCEL", nil)
    style:UIAlertActionStyleCancel
    handler:^(UIAlertAction *action) {
        [self cancelRequest];
    }]];
[self presentViewController:self.connectingAlert animated:TRUE completion:nil];

Затем позже я хочу программно отключить предупреждение как это:

[self dismissViewControllerAnimated:FALSE completion:nil];

Код отклонения работает нормально в iOS, но ничего не делает в Ма c Катализатор. Это может быть связано с тем, что оповещения представляются как часть окна приложения, как бы вне приложения, а стиль представления игнорируется. Но я ожидаю, что метод dismiss все равно повлияет на оповещения Ma c.

Я попытался сделать это, чтобы убедиться, что все правильно подключено:

UIViewController *test1 = self.connectingAlert.presentingViewController;
UIViewController *test2 = self.connectingAlert.presentingViewController.presentedViewController;

test1 возвращает навигацию Контроллер, частью которого является контроллер вида, выглядит странно, но он делает то же самое с iOS. test2 возвращает мое предупреждение. Просто чтобы убедиться, я попробовал этот код, но он тоже не работает:

[self.connectingAlert.presentingViewController dismissViewControllerAnimated:FALSE completion:nil];

У кого-нибудь есть опыт работы с этим? Я ничего не вижу в документации 1018 *.

1 Ответ

0 голосов
/ 04 марта 2020

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

[self dismissViewControllerAnimated:FALSE completion:nil];

... Я должен отправить сообщение об отклонении оповещению вместо этого, а затем он отклоняет:

[self.connectingAlert dismissViewControllerAnimated:FALSE completion:nil];

Документация для dismissViewControllerAnimated говорит:

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

Я думаю, что это означает, что Ma c Catalyst делает что-то смешное с связь между представлением и представленным контроллером представления. Если я проверю self.presentedViewController, это даст мне UIAlertController. Но если я позвоню self dismiss dismissViewControllerAnimated..., ничего не произойдет, как будто нет представленного контроллера представления. Но если я вызову self.connectingAlert dismissViewControllerAnimated..., метод dismiss каким-то образом найдет свой путь к реальному контроллеру представления. Я сообщу об этом как об ошибке в Apple.

Между тем, я рад, что есть обходной путь.

...