2012-05-01 9 views

risposta

73

UIWindow in un progetto Storyboard può essere derivata come spiegato in UIApplicationDelegate riferimento di Apple:

finestra
Quando viene utilizzata una storyboard, l'applicazione deve presentare il storyboard aggiungendolo ad una finestra e mettendo quella finestra sullo schermo. L'applicazione richiede questa proprietà per la finestra. Il riferimento trattenuto alla finestra da questa proprietà è necessario per impedire la pubblicazione della finestra . Se il valore della proprietà è nil (il valore predefinito ), l'applicazione crea un'istanza generica di UIWindow e assegnarla a questa proprietà affinché il delegato faccia riferimento. È possibile che implementino il metodo getter di questo protocollo per fornire l'applicazione con una finestra diversa.

In altre parole nella tua AppDelegate implementazione è sufficiente aggiungere il seguente 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 { } 
} 
+0

Potete per favore fornire come posso ignorare getter in Swift? –

+1

Ho aggiornato la risposta con il codice Swift –

+0

Grazie mille .. Ha funzionato. Non stavo creando setter per quello in modo da ottenere un errore. –

1

Nelle mie app, ho visto la proprietà "window" dichiarata in AppDelegate.h durante la creazione di una nuova app dai modelli Xcode.

È possibile modificare tale proprietà per passare da "UIWindow" a "MyWindow" a quel punto.

Oppure, una soluzione meno elegante, è possibile semplicemente trasmettere il tipo di oggetto window al tipo "MyWindow" durante l'accesso.

+1

Nessuno di coloro che causerà un 'MyWindow' per ottenere il creato: sono solo erroneamente che esprimono un' UIWindow' già esistente ad un 'MyWindow '. –

+0

@NoahWitherspoon - probabilmente ora vfxdomain sa come creare un MyWindow (poiché ha fatto riferimento a [questa domanda correlata] (http://stackoverflow.com/questions/7883886/where-can-i-change-the-window-my -app-uses-from-uiwindow-to-my-own-subclass-mywi) nel suo post in alto). La mia opinione sulla sua domanda era che si stava chiedendo come ottenere MyWindow restituito dal metodo getter della proprietà "' window' ". –

+0

@ Michael Dautermann - sì, questo è quello che sto chiedendo ...Cambiare UIWindow in myWindow in App Delegate non funzionerà come indicato da Noah Witherspoon. – izaslavs

0

La sua non è così duro che si' sto andando a prima sottoclasse UIWindow

class WinCustom : UIWindow{ 
.... 
} 

poi nel 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 
} 
Problemi correlati