iphone - Subclasificando UIWindow mientras usas guiones gráficos
objective-c ios (3)
Tengo el mismo problema que se explica en esta pregunta:
Mi pregunta es ¿cómo implemento un método getter ''ventana'' en mi delegado de aplicación que devuelve la subclase ''MyWindow''? ¿O tal vez hay otras formas de asignar mi subclase a la ventana principal de mi aplicación?
En mis propias aplicaciones, he visto la propiedad de " window
" declarada en AppDelegate.h al crear una nueva aplicación a partir de las plantillas de Xcode.
Puede modificar esa propiedad para cambiar de " UIWindow
" a " MyWindow
" en ese momento.
O, una solución menos elegante, simplemente puede convertir el retorno de la window
a un tipo de objeto " MyWindow
" cuando acceda a ella.
No es tan difícil que vayas a la primera subclase UIWindow
class WinCustom : UIWindow{
....
}
entonces en 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
}
UIWindow
en un proyecto de Storyboard se puede UIApplicationDelegate
como se explica en la referencia UIApplicationDelegate
de Apple:
ventana
Cuando se utiliza un guión gráfico, la aplicación debe presentar el guión gráfico agregándolo a una ventana y colocando esa ventana en pantalla. La aplicación consulta esta propiedad para la ventana. La referencia retenida a la ventana por esta propiedad es necesaria para evitar que la ventana se abra. Si el valor de la propiedad esnil
(el valor predeterminado), la aplicación crea una instancia genérica deUIWindow
y la asigna a esta propiedad para que el delegado haga referencia. Puede implementar el método getter de este protocolo para proporcionar a la aplicación una ventana diferente.
En otras palabras, en su implementación de AppDelegate
simplemente agregue el siguiente getter
C objetivo
- (MyCustomWindow *)window
{
static MyCustomWindow *customWindow = nil;
if (!customWindow) customWindow = [[MyCustomWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
return customWindow;
}
Rápido
var customWindow: MyCustomWindow?
var window: UIWindow? {
get {
customWindow = customWindow ?? MyCustomWindow(frame: UIScreen.mainScreen().bounds)
return customWindow
}
set { }
}