создание подклассов UIWindow при использовании раскадровок

У меня та же проблема, как объяснено в этом вопросе:

Где я могу изменить окно, которое использует мое приложение, с UIWindow на мой собственный подкласс & quot; MyWindow & quot; с раскадровкой?

Мой вопрос заключается в том, как мне реализовать «окно»; метод getter в моем делегате приложения, который возвращает «MyWindow»; подкласс? Или, может быть, есть другие способы назначить мой подкласс главному окну моего приложения?

Ответы на вопрос(3)

UIWindow в проекте раскадровки можно разделить на подклассы, как описано в AppleUIApplicationDelegate ссылка:

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.

Другими словами в вашемAppDelegate реализация просто добавить следующий геттер

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 { }
}

window& Quot; свойство, объявленное в AppDelegate.h при создании нового приложения из шаблонов Xcode.

Вы можете изменить это свойство, чтобы изменить с & quot;UIWindow& Quot; на & quot;MyWindow& Quot; в таком случае.

Или, менее элегантное решение, вы можете просто броситьwindowвозвращение к & quot;MyWindow& Quot; тип объекта при доступе к нему.

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
}

ВАШ ОТВЕТ НА ВОПРОС