Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.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
Ios 获取应用程序&x27;s主窗口_Ios_Objective C_Uiwindow_Uiapplication - Fatal编程技术网

Ios 获取应用程序&x27;s主窗口

Ios 获取应用程序&x27;s主窗口,ios,objective-c,uiwindow,uiapplication,Ios,Objective C,Uiwindow,Uiapplication,UIApplication有一个方法keyWindow,但是如果显示警报视图,则返回警报视图的窗口,而不是应用程序的主窗口 如何获取应用程序的主窗口?UIApplicationLegate通常引用“主窗口”: 此外,UIApplication还有一组窗口[[UIApplication-sharedApplication]windows] 请参阅。我不是100%确定这在所有情况下都有效,但这应该有效: UIWindow *mainWindow = [UIApplication sharedAppl

UIApplication有一个方法
keyWindow
,但是如果显示警报视图,则返回警报视图的窗口,而不是应用程序的主窗口


如何获取应用程序的主窗口?

UIApplicationLegate通常引用“主窗口”:

此外,
UIApplication
还有一组窗口
[[UIApplication-sharedApplication]windows]


请参阅。

我不是100%确定这在所有情况下都有效,但这应该有效:

UIWindow *mainWindow = [UIApplication sharedApplication].windows[0];
窗口从后向前排列,因此主窗口应始终位于索引0处

UIApplication *application = [UIApplication sharedInstance];
NSarray *appWindows = [NSArray arrayWithArray:application.windows];
UIWindow *mainWindow = [appWindows objectAtIndex:0];
我不确定,但这可能会有所帮助。

在Swift中:

UIApplication.sharedApplication().delegate?.window

对我来说,我展示了一个
popViewController

self.presentViewController(popViewController, animated: true, completion: nil)
然后在这个popViewController的
viewDidLoad()
中,我添加了一个子视图,这会导致控制台出错和显示错误。因此,我必须找到另一个解决方案,使其发挥作用。希望这能有所帮助。

Swift 3

    if let window = NSApplication.shared().windows.first {
        // you can now modify window attributes
    }
class func sharedInstance() -> AppDelegate{
        return UIApplication.shared.delegate as! AppDelegate
    }
Swift 3.0版本:

我还要补充一点,由于iOS 8.0
UIAlertController
已经取代了
UIAlertView
,作为视图控制器,您可能不再面临创建新窗口的问题。

Swift 3

    if let window = NSApplication.shared().windows.first {
        // you can now modify window attributes
    }
class func sharedInstance() -> AppDelegate{
        return UIApplication.shared.delegate as! AppDelegate
    }

这对代理来说是可选的,不是吗?我希望有一种更“具体”的方式[[[UIApplication sharedApplication]委派]窗口]--效果很好。你能详细说明一下你在尝试什么吗?看看这个问题可能对你有帮助:-如果没有窗口,你应该调用
[[UIApplication sharedApplication]windows]firstObject]
,以避免出现越界异常(这并不是说永远不会有任何窗口,但避免使用这些窗口是一个好习惯。他说,
UIApplication
not
NSApplication
,它被标记为IOS。如果每次出现这种情况,我都有一美元(人们用可可触摸式回答可可问题),我会是一个有钱人。:)放松点。:)