2012-05-01 62 views

Odpowiedz

73

UIWindow w Storyboard projektu można podklasy jak wyjaśniono w Apple UIApplicationDelegate odniesienia:

okna
Kiedy storyboard jest używana aplikacja musi przedstawić storyboard, dodając je do okna i umieszczenie tego okna na ekranie. Aplikacja zapytuje o tę właściwość dla okna. Zachowane odniesienie do okna według tej właściwości jest konieczne, aby zapobiec zwolnieniu okna . Jeśli wartość właściwości to nil (domyślna wartość to ), aplikacja tworzy ogólne wystąpienie UIWindow i przypisać je do tej właściwości dla delegata do odwołania. Możesz zaimplementować metodę getter tego protokołu, aby udostępnić aplikację w innym oknie.

Innymi słowy w implementacji AppDelegate prostu dodaj następującą 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

Czy możesz podać, w jaki sposób mogę zmienić zdobywcę w Swift? –

+1

Zaktualizowałem odpowiedź za pomocą kodu Swift –

+0

Wielkie dzięki. To zadziałało. Nie tworzyłem tego, żeby uzyskać błąd. –

1

We własnych aplikacjach widziałem "window" właściwość zadeklarowaną w AppDelegate.h podczas tworzenia nowej aplikacji z szablonów Xcode.

Możesz zmodyfikować tę właściwość, aby zmienić wartość z "UIWindow" na "MyWindow" w tym miejscu.

Albo, mniej eleganckie rozwiązanie, możesz po prostu odrzucić powrót do obiektu typu "" w celu uzyskania dostępu do obiektu typu "".

+1

Żadna z tych spowoduje 'MyWindow' aby tworzone-Oni są po prostu błędnie oddające już istniejący' UIWindow' do 'MyWindow '. –

+0

@NoahWitherspoon - vfxdomain prawdopodobnie już teraz wie, jak utworzyć MyWindow (ponieważ odniósł się do [tego powiązanego pytania] (http://stackoverflow.com/questions/7883886/where-can-i-change-the-window-my -app-uses-from-uiwindow-to-my-own-subclass-mywi) w swoim zamieszczaniu tam). Moją odpowiedzią na jego pytanie był, że zastanawiał się, jak odzyskać MyWindow metodą getter z właściwości "' window' ". –

+0

@Michael Dautermann - tak, o to pytam ...Zmiana UIWindow na myWindow w Delegacie aplikacji nie będzie działać tak, jak wskazał Noah Witherspoon. – izaslavs

0

jego nie tak trudno ci” idę do Pierwszy podklasa UIWindow

class WinCustom : UIWindow{ 
.... 
} 

następnie w 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 
}