Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

subclassing UIWindow while using storyboards

I have same issue as explained in this question:

Where can I change the window my app uses from UIWindow to my own subclass "MyWindow" with storyboard?

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?

like image 786
izaslavs Avatar asked May 01 '12 19:05

izaslavs


2 Answers

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 is nil (the default), the application creates a generic instance of UIWindow 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 { } } 
like image 147
Tomas Camin Avatar answered Sep 28 '22 09:09

Tomas Camin


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 } 
like image 35
yeahdixon Avatar answered Sep 28 '22 08:09

yeahdixon