1
繼從this SO answer策略,在iOS的7我能找到的頂層窗口在我的應用程序,像這樣:如何區分iOS8中的頂級窗口?
UIWindow *topWindow = [[[UIApplication sharedApplication].windows sortedArrayUsingComparator:^NSComparisonResult(UIWindow *win1, UIWindow *win2) {
return win1.windowLevel - win2.windowLevel;
}] lastObject];
然而,由於iOS8上可能有一個或多個UITextEffectsWindow
S的可能是在上面的lastObject
戰略。不好。
最初我可以窗口和測試哪些窗口是UIWindow
就像這樣的陣列上運行謂詞濾波器:
NSPredicate *filter = [NSPredicate predicateWithBlock:^BOOL(id obj, NSDictionary *bind) {
return [obj isMemberOfClass:[UIWindow class]];
}];
然而,頂部UIWindow
可能不是UIWindow
,但一些子類等NRWindow 。這裏有一個例子:
[[NRWindow class] isKindOfClass:[UIWindow class]]; // true
[[UITextEffectsWindow class] isKindOfClass:[UIWindow class]]; // true
我的問題是這樣的:我怎樣才能安全地區分/找到頂級的UIWindow
子類,所以我可以做的事情一樣
[[topWindow rootViewController] presentViewController:mailComposer animated:YES completion:nil];
(注:測試爲UITextEffectsWindow
直接是皺眉,[[UIApplication sharedApplication] keyWindow]
不幸的是不可靠。)
謝謝您的建議。不幸的是,我不能控制創建的窗口。在調試時,一個團隊可以添加一個NRWindow,屏幕截圖團隊可以添加另一個帶有漂亮覆蓋的窗口。 – Drakes