2012-05-01 11 views

Respuesta

73

UIWindow en un proyecto de guión gráfico puede tener subclases como se explica en UIApplicationDelegate referencia de Apple:

ventana
Cuando se utiliza un guión gráfico, la aplicación debe presentar el guión gráfico añadiéndolo a una ventana y poniendo esa ventana en la pantalla. La aplicación consulta esta propiedad para la ventana. La referencia retenida a la ventana por esta propiedad es necesaria para evitar que se libere la ventana . Si el valor de la propiedad es nil (el valor predeterminado es ), la aplicación crea una instancia genérica de UIWindow y y la asigna a esta propiedad para que el delegado haga referencia. Puede implementar el método getter de este protocolo para proporcionar la aplicación con una ventana diferente.

En otras palabras, en su aplicación AppDelegate simplemente añadir lo siguiente captador

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

¿Puede proporcionarme cómo puedo anular getter en Swift? –

+1

He actualizado la respuesta con el código Swift –

+0

Muchas gracias ... Funcionó. No estaba creando setter para eso, así que estaba obteniendo el error. –

1

En mis propias aplicaciones, he visto la propiedad "window" declarada en AppDelegate.h al crear una nueva aplicación desde las plantillas de Xcode.

Puede modificar esa propiedad para cambiar de "UIWindow" a "MyWindow" en ese punto.

O, una solución menos elegante, simplemente puede convertir window a un tipo de objeto "MyWindow" al acceder a él.

+1

Ninguno de los que va a causar un 'MyWindow' que se crean; son simplemente por error emitan un' UIWindow' ya existente a un 'MyWindow '. –

+0

@NoahWitherspoon - vfxdomain probablemente ya sepa cómo crear una MyWindow (ya que se refirió a [esta pregunta relacionada] (http://stackoverflow.com/questions/7883886/where-can-i-change-the-window-my -app-uses-from-uiwindow-to-my-own-subclass-mywi) en su publicación allí arriba). Mi opinión sobre su pregunta era que se preguntaba cómo devolver MyWindow devuelto por el método getter de la propiedad "' window' ". –

+0

@Michael Dautermann - Sí, eso es lo que estoy preguntando ...Cambiar UIWindow a myWindow en App Delegate no funcionará como señalaba Noah Witherspoon. – izaslavs

0

No es tan duro que' vamos a primera subclase UIWindow

class WinCustom : UIWindow{ 
.... 
} 

después 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 
} 
Cuestiones relacionadas