无需引用即可从不同的 UINavigationController 获取顶级 UIViewController
Get top UIViewController from different UINavigationController without reference
我有一个视图层次结构
a) UINavigationController
> b) UIViewController
> c) UITabbarController
> d) UINavigationController
好的,现在在应用程序的任何时候,我都在 b | c | d – 我添加了通知来处理(和检查)用户是否去(或来)background/foreground。
这很好用,但如果用户来到前台 – 我将在不同的(新)UINavigationController
对象中呈现一个 UIViewController
(我们将其命名为 'z')。
这也很好用..但是如果我已经在 z 中并且用户进入后台并且出现在前台,我不应该再次显示 z,因为它已经可见,这就是问题所在。
我面临的问题:
我不保留对那个不同(新)UINavigationController
对象的引用,甚至不保留对 z 的引用。
那么 – 我如何捕捉到当前可见的视图是 z 本身?
如果它来自同一个导航控制器(如 a),我可能会通过它的 属性 topViewController
检测到它。但是在这里我不能?
有什么方法可以在不为其创建引用的情况下完成此操作?
您可以在 window 的根视图控制器上显示控制器(在您的情况下为 zController)并检查它是否已经显示。
在根视图控制器上呈现控制器,
//Use this code to present the zController
UIViewController *rootViewController =[[[[UIApplication sharedApplication] delegate] window] rootViewController];
[rootViewController presentViewController:zController animated:YES completion:nil];
当应用程序进入前台时,您可以检查控制器是否已经呈现如下,
- (BOOL)checkIfzControllerIsAlreadyPresented
{
UIViewController *rootViewController =[[[[UIApplication sharedApplication] delegate] window] rootViewController];
id obj = rootViewController.presentedViewController;
if (obj && [obj isKindOfClass:[zController class]]) {
return YES; //zController is already visble
}
return NO;
}
我有一个视图层次结构
a) UINavigationController
> b) UIViewController
> c) UITabbarController
> d) UINavigationController
好的,现在在应用程序的任何时候,我都在 b | c | d – 我添加了通知来处理(和检查)用户是否去(或来)background/foreground。
这很好用,但如果用户来到前台 – 我将在不同的(新)UINavigationController
对象中呈现一个 UIViewController
(我们将其命名为 'z')。
这也很好用..但是如果我已经在 z 中并且用户进入后台并且出现在前台,我不应该再次显示 z,因为它已经可见,这就是问题所在。
我面临的问题:
我不保留对那个不同(新)
UINavigationController
对象的引用,甚至不保留对 z 的引用。那么 – 我如何捕捉到当前可见的视图是 z 本身?
如果它来自同一个导航控制器(如 a),我可能会通过它的 属性 topViewController
检测到它。但是在这里我不能?
有什么方法可以在不为其创建引用的情况下完成此操作?
您可以在 window 的根视图控制器上显示控制器(在您的情况下为 zController)并检查它是否已经显示。
在根视图控制器上呈现控制器,
//Use this code to present the zController
UIViewController *rootViewController =[[[[UIApplication sharedApplication] delegate] window] rootViewController];
[rootViewController presentViewController:zController animated:YES completion:nil];
当应用程序进入前台时,您可以检查控制器是否已经呈现如下,
- (BOOL)checkIfzControllerIsAlreadyPresented
{
UIViewController *rootViewController =[[[[UIApplication sharedApplication] delegate] window] rootViewController];
id obj = rootViewController.presentedViewController;
if (obj && [obj isKindOfClass:[zController class]]) {
return YES; //zController is already visble
}
return NO;
}