到目前为止,我已经可以使用以下代码可靠地获取最顶层(可见的)viewController:
UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;
while (topController.presentedViewController) {
topController = topController.presentedViewController;
}
//topController.class now contains the name of my top viewController
//I can, for example, check if my contact list view is visible to the user with:
if (topController.class == [ContactViewController class]) {
[viewTitle setText:@"Contacts"];
}
这非常容易,而且使用起来也很棒。我的问题是我尝试检测以下类是否为顶级viewController
@interface GalleryViewController : UIViewController <UITextFieldDelegate, UICollectionViewDelegate, UICollectionViewDataSource>
现在,topController.class不等于
[GalleryViewController class]
,就像我所有其他viewControllers一样。相反,当我使用调试器检查值时,它是带有随机内存地址的(_UIModalItemsPresentingViewController *)
(所有其他viewController都显示为带有随机内存地址的(Class)ContactViewController)。为什么这个特定的类出现这么奇怪的名字,是因为定义,还是其他?此外,如何才能正确地获得最高的viewController?
最佳答案
您需要确保使用此代码段实际上位于最顶部的窗口上
UIWindow *topWindow = [[[UIApplication sharedApplication].windows sortedArrayUsingComparator:^NSComparisonResult(UIWindow *win1, UIWindow *win2) {
return win1.windowLevel - win2.windowLevel;
}] lastObject];
关于ios - 当实现多个其他类时,如何获取最顶层的viewController?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24059817/