presentViewController 来自 sharedInstance of utility class
presentViewController from sharedInstance of utility class
我想展示一个来自一些代码的 MFMailComposerViewController,这些代码深藏在实用程序 class 中,可通过共享实例访问。
当我尝试使用
[self presentViewController:mailVC animated:YES completion:nil];
我收到一个错误,显示的视图不在有意义的视图层次结构中。
当我尝试使用导航控制器时:
[self.navigationController presentViewController:mailVC animated:YES completion:nil];
没有错误发生但什么也没发生。
我应该从调用 sharedInstance 的 VC 中呈现它是有道理的,但我不知道如何从共享实例中引用它。
感谢您就如何执行此操作提出任何建议。
您可以从最顶层的视图控制器中展示它。这是我得到一个的方法。
+ (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;
}
我想展示一个来自一些代码的 MFMailComposerViewController,这些代码深藏在实用程序 class 中,可通过共享实例访问。
当我尝试使用
[self presentViewController:mailVC animated:YES completion:nil];
我收到一个错误,显示的视图不在有意义的视图层次结构中。
当我尝试使用导航控制器时:
[self.navigationController presentViewController:mailVC animated:YES completion:nil];
没有错误发生但什么也没发生。
我应该从调用 sharedInstance 的 VC 中呈现它是有道理的,但我不知道如何从共享实例中引用它。
感谢您就如何执行此操作提出任何建议。
您可以从最顶层的视图控制器中展示它。这是我得到一个的方法。
+ (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;
}