presentViewController из sharedInstance служебного класса - PullRequest
0 голосов
/ 01 декабря 2018

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

Когда я пробую его с

[self presentViewController:mailVC animated:YES completion:nil];

, я получаюошибка, что представление представления не находится в иерархии представления, которая имеет смысл.

Когда я пытаюсь использовать navigationController:

[self.navigationController presentViewController:mailVC animated:YES completion:nil];

ошибка не возникает, но ничего не происходит.

Имеет смысл представить его из VC, который вызывает sharedInstance, но я не знаю, как ссылаться на него из общего экземпляра.

Спасибо за любые предложения о том, как это сделать.

1 Ответ

0 голосов
/ 02 декабря 2018

Вы можете представить его с самого контроллера сверху.Вот что я сделал, чтобы получить его.

+ (UIViewController *)topViewController {
    UIViewController *topController = [[UIApplication sharedApplication].windows firstObject].rootViewController;

    if ([topController isKindOfClass:[UINavigationController class]]) {
        topController = [[(UINavigationController *)topController viewControllers] lastObject];
    }

    while (topController.presentedViewController) {
        topController = topController.presentedViewController;

        if ([topController isKindOfClass:[UINavigationController class]]) {
            topController = [[(UINavigationController *)topController viewControllers] lastObject];
        }
    }

    return topController;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...