Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何区分iOS8中的顶部窗口?_Ios_Objective C_Ios8_Uiwindow - Fatal编程技术网

如何区分iOS8中的顶部窗口?

如何区分iOS8中的顶部窗口?,ios,objective-c,ios8,uiwindow,Ios,Objective C,Ios8,Uiwindow,按照iOS 7的策略,我可以在我的应用程序中找到顶部窗口,如下所示: UIWindow *topWindow = [[[UIApplication sharedApplication].windows sortedArrayUsingComparator:^NSComparisonResult(UIWindow *win1, UIWindow *win2) { return win1.windowLevel - win2.windowLevel; }] lastObject]; 但是,

按照iOS 7的策略,我可以在我的应用程序中找到顶部窗口,如下所示:

UIWindow *topWindow = [[[UIApplication sharedApplication].windows sortedArrayUsingComparator:^NSComparisonResult(UIWindow *win1, UIWindow *win2) {
    return win1.windowLevel - win2.windowLevel;
}] lastObject];
但是,由于iOS8,可能存在一个或多个
uitextfectswindow
s,它们可能是上述策略中的
lastObject
。不好

最初,我可以在窗口数组上运行谓词过滤器,并测试哪些窗口是
UIWindow
s,如下所示:

NSPredicate *filter = [NSPredicate predicateWithBlock:^BOOL(id obj, NSDictionary *bind) {
    return [obj isMemberOfClass:[UIWindow class]];
}];
但是,顶部的
UIWindow
可能不是
UIWindow
,而是一些类似的子类。以下是一个例子:

[[NRWindow class] isKindOfClass:[UIWindow class]]; // true
[[UITextEffectsWindow class] isKindOfClass:[UIWindow class]]; // true
我的问题是:如何安全地区分/找到顶部的
ui窗口
子类,以便执行以下操作

[[topWindow rootViewController] presentViewController:mailComposer animated:YES completion:nil];

(注意:不赞成直接测试
uitextfectswindow
,不幸的是,
[[UIApplication sharedApplication]keyWindow]
不可靠。)

我假设您只想从您创建的窗口演示。所以你可以:

  • 编写UIWindow的子类,并在创建窗口时使用它。然后可以测试该子类的窗口
  • 向所有有资格显示模式视图的窗口添加。然后,您可以在搜索窗口时测试关联对象

我假设您只想从您创建的窗口中演示。所以你可以:

  • 编写UIWindow的子类,并在创建窗口时使用它。然后可以测试该子类的窗口
  • 向所有有资格显示模式视图的窗口添加。然后,您可以在搜索窗口时测试关联对象

谢谢您的建议。不幸的是,我无法控制创建哪些窗口。在调试过程中,一个团队可能会添加一个NRWindow,而屏幕截图团队可能会添加另一个具有漂亮覆盖的窗口。谢谢您的建议。不幸的是,我无法控制创建哪些窗口。在调试过程中,一个团队可能会添加一个NRWindow,屏幕截图团队可能会添加另一个具有漂亮覆盖的窗口。