使用故事板时子类化UIWindow

iza*_*avs 26 iphone cocoa-touch objective-c uiwindow ios

我有同样的问题,如本问题所述:

我在哪里可以将我的应用程序使用的窗口从UIWindow更改为我自己的子类"MyWindow"和storyboard?

我的问题是如何在我的app委托中实现一个'window'getter方法,返回'MyWindow'子类?或者也许有其他方法可以将我的子类分配到我的应用程序的主窗口?

Tom*_*min 77

UIWindow在Storyboard项目中可以按照Apple的UIApplicationDelegate参考中的说明进行子类化:

窗口
当使用故事板时,应用程序必须通过将故事板添加到窗口并将该窗口放在屏幕上来显示故事板.应用程序在窗口中查询此属性.此属性保留对窗口的引用是保持窗口不被释放所必需的.如果属性的值是nil(缺省值),则应用程序将创建一个通用实例,UIWindow并将其分配给此属性以供委托引用.您可以实现此协议的getter方法,以便为应用程序提供不同的窗口.

换句话说,在您的AppDelegate实现中只需添加以下getter

Objective-C的

- (MyCustomWindow *)window
{    
    static MyCustomWindow *customWindow = nil;
    if (!customWindow) customWindow = [[MyCustomWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    return customWindow;
}
Run Code Online (Sandbox Code Playgroud)

迅速

var customWindow: MyCustomWindow?    
var window: UIWindow? {
    get {
        customWindow = customWindow ?? MyCustomWindow(frame: UIScreen.mainScreen().bounds)
        return customWindow
    }
    set { }
}
Run Code Online (Sandbox Code Playgroud)