I have same issue as explained in this question:
My question is how do i implement a 'window' getter method in my app delegate that returns 'MyWindow' subclass? Or maybe there is other ways to assign my subclass to my app's main window?
I have same issue as explained in this question:
My question is how do i implement a 'window' getter method in my app delegate that returns 'MyWindow' subclass? Or maybe there is other ways to assign my subclass to my app's main window?
UIWindow
in a Storyboard project can be subclassed as explained in Apple's UIApplicationDelegate
reference:
window
When a storyboard is being used, the application must present the storyboard by adding it to a window and putting that window on-screen. The application queries this property for the window. The retained reference to the window by this property is necessary to keep the window from being released. If the value of the property isnil
(the default), the application creates a generic instance ofUIWindow
and assign it to this property for the delegate to reference. You may implement the getter method of this protocol to provide the application with a different window.
In other words in your AppDelegate
implementation simply add the following getter
Objective-C
- (MyCustomWindow *)window
{
static MyCustomWindow *customWindow = nil;
if (!customWindow) customWindow = [[MyCustomWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
return customWindow;
}
Swift
var customWindow: MyCustomWindow?
var window: UIWindow? {
get {
customWindow = customWindow ?? MyCustomWindow(frame: UIScreen.mainScreen().bounds)
return customWindow
}
set { }
}
Its not so hard you're going to first subclass UIWindow
class WinCustom : UIWindow{
....
}
then in 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
}
In my own apps, I've seen "window
" property declared in AppDelegate.h when creating a new app from the Xcode templates.
You can modify that property to change from "UIWindow
" to "MyWindow
" at that point.
Or, a less elegant solution, you can simply cast window
's return to a "MyWindow
" object type when accessing it.
MyWindow
to get created—they’re just mistakenly casting an already-existing UIWindow
to a MyWindow
. –
Endemic window
" property. –
Nickelplate UIApplicationDelegate
protocol has window
property which you can use
import UIKit
class CustomWindow : UIWindow {
//...
}
class AppDelegate: UIResponder, UIApplicationDelegate {
var customWindow: CustomWindow?
var window: UIWindow? {
get {
customWindow = customWindow ?? CustomWindow(frame: UIScreen.main.bounds)
return customWindow
}
set { }
}
//...
}
This solution just returns a custom UIWindow
© 2022 - 2024 — McMap. All rights reserved.