我已經在這個問題解釋同一個問題:同時使用故事板
我的問題是我如何在我的應用程序委託,返回「mywindow的」子類中實現一個「窗口」的getter方法?或者也許還有其他方法將我的子類分配到我的應用程序的主窗口?
我已經在這個問題解釋同一個問題:同時使用故事板
我的問題是我如何在我的應用程序委託,返回「mywindow的」子類中實現一個「窗口」的getter方法?或者也許還有其他方法將我的子類分配到我的應用程序的主窗口?
在故事板項目UIWindow
可以被繼承,如蘋果公司的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;
}
斯威夫特
var customWindow: MyCustomWindow?
var window: UIWindow? {
get {
customWindow = customWindow ?? MyCustomWindow(frame: UIScreen.mainScreen().bounds)
return customWindow
}
set { }
}
在我自己的應用程序中,當從Xcode模板創建新應用程序時,我在AppDelegate.h中看到了「window
」屬性。
您可以修改該屬性以在此時從「UIWindow
」更改爲「MyWindow
」。
或者,不太優雅的解決方案,您可以在訪問它時簡單地將window
返回到「MyWindow
」對象類型。
那些都將導致'MyWindow'獲得創建 - 他們只是錯投了已經存在的'UIWindow'到'爲mywindow '。 –
@NoahWitherspoon - vfxdomain現在可能已經知道如何創建一個MyWindow(因爲他提到[這個相關的問題](http://stackoverflow.com/questions/7883886/where-can-i-change-the-window-my -app-uses-from-uiwindow-to-my-own-subclass-mywi)在他的帖子裏)。我認爲他的問題是他想知道如何通過「window'」屬性的getter方法返回MyWindow。 –
@Michael Dautermann - 是的,這就是我所要求的...Noah Witherspoon指出,在App Delegate中將UIWindow更改爲myWindow將不起作用。 – izaslavs
它不是那麼難,你」重新去第一子類的UIWindow
class WinCustom : UIWindow{
....
}
然後在AppDelegate中:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
self.window = WinCustom(frame: UIScreen.main.bounds)
self.window?.rootViewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController()
return true
}
你能提供一下我怎樣在Swift中重寫getter嗎? –
我用Swift代碼更新了答案 –
非常感謝。它工作正常。我沒有爲此創建setter,以至於我得到錯誤。 –