在 UIAlertController 下获取最顶层的视图控制器
Posted
技术标签:
【中文标题】在 UIAlertController 下获取最顶层的视图控制器【英文标题】:Get top most view controller under UIAlertController 【发布时间】:2018-07-03 14:26:26 【问题描述】:我正在使用下面的代码来查找最顶层的 ViewController。如果出现警报,上面的代码会给出 UIAlertController。如何在 UIAlertController 下获取顶视图控制器?
+(UIViewController*)topMostViewController:(UIViewController*)rootViewController
if ([rootViewController isKindOfClass:[UITabBarController class]])
UITabBarController* tabBarController = (UITabBarController*)rootViewController;
return [self topMostViewController:tabBarController.selectedViewController];
else if ([rootViewController isKindOfClass:[UINavigationController class]])
UINavigationController* navigationController = (UINavigationController*)rootViewController;
return [self topMostViewController:navigationController.visibleViewController];
else
return rootViewController;
有什么想法吗?
【问题讨论】:
你是如何使用上面的代码的,更广泛地说,你为什么要做这个检查?你想完成什么? 【参考方案1】:更新了答案。由于您想找到可见的最顶层视图控制器,因此您可以使用这两种方法中的任何一种。通过将 UINavigation 控制器作为参数传递,从您当前所在的视图控制器调用此方法。
func topMostViewController(controller:UINavigationController) -> UIViewController
return controller.topViewController!
func visibleViewController(controller:UINavigationController) -> UIViewController
return controller.visibleViewController!
【讨论】:
我尝试了你的想法来找到最顶层的 ViewController,但是如果出现警报,上面的代码会给出 UIAlertController。如何在 UIAlertController 下获取顶视图控制器? 检查以下方法,查看导航堆栈中的第二项。 self.navigationController?.viewControllers 谢谢苏宾。但这也行不通。您能否以我的代码为例提供更多信息 谢谢苏宾。我想找到最上面的 ViewController,但是如果出现警报,上面的代码会给出 UIAlertController。如何在 UIAlertController 下获取顶视图控制器? 它对我有用。你如何呈现警报?你使用的是 UIAlertView 还是 UIAlertController ?以上是关于在 UIAlertController 下获取最顶层的视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
如何在Objective C中通过UIView获取UIAlertController?
使用 StoreKit 时获取 Apple UIAlertController 完成