2013-07-24 15 views
23

Aplikacja UIApplication ma metodę keyWindow, jednak jeśli wyświetli się widok alertu, spowoduje to powrót do okna widoku alertu, a nie do głównego okna aplikacji.Pobierz główne okno aplikacji

Jak mogę uzyskać główne okno aplikacji?

+0

można proszę bardziej skomplikowane, co starasz ..? –

+0

spójrz na to pytanie, które może Ci pomóc: - http://stackoverflow.com/questions/7871241/is-a-mainwindow-xib-truly-eded-in-ios-application –

Odpowiedz

46

UIApplicationDelegate zwykle ma odniesienie do „głównego okna”:

[[[UIApplication sharedApplication] delegate] window]; 

Ponadto UIApplication posiada szereg okien [[UIApplication sharedApplication] windows].

Zobacz UIApplication Class Reference.

+2

Jest to opcjonalne, ponieważ delegat nie jest to? Mam nadzieję na bardziej "konkretny" sposób. –

+0

Zobacz moją aktualizację mojej odpowiedzi. – Espresso

+0

[[[[UIApplication shareApplication] delegate] window] - działa poprawnie. –

8

nie jestem w 100% pewien, że to działa w każdym przypadku, ale to powinno działać:

UIWindow *mainWindow = [UIApplication sharedApplication].windows[0]; 

Okna są sortowane tyłu do przodu tak główne okno powinno być zawsze pod indeksem 0.

+9

Powinieneś zadzwonić do okna [[[UIApplication sharedApplication]] firstObject] 'aby uniknąć wyjątku poza granicami, jeśli nie ma okien (inaczej nie byłoby żadnych okien, ale dobrym zwyczajem jest unikanie tych – michaellindahl

+0

@michaellindahl right – cmp

3
UIApplication *application = [UIApplication sharedInstance]; 
NSarray *appWindows = [NSArray arrayWithArray:application.windows]; 
UIWindow *mainWindow = [appWindows objectAtIndex:0]; 

Nie jestem pewien, ale może to pomóc.

3

w Swift:

UIApplication.sharedApplication().delegate?.window 
0

Dla mnie było przedstawienie popViewController

self.presentViewController(popViewController, animated: true, completion: nil) 

a następnie w viewDidLoad() tego popViewController byłem dodając podrzędny, to powoduje błąd w konsola i błąd wyświetlania. Muszę więc znaleźć inne rozwiązanie, które sprawi, że będzie działało. Mam nadzieję że to pomoże.

0

Swift 3

if let window = NSApplication.shared().windows.first { 
     // you can now modify window attributes 
    } 
+0

Powiedział 'UIApplication', a nie' NSApplication', jest oznaczony jako iOS – fpg1503

+0

Gdybym miał dolara za każdym razem, kiedy to się zdarzyło (ludzie odpowiadający na pytania Cocoa z odpowiedziami Cocoa Touch), byłbym bogatym człowiekiem.:) Wytnij Teda trochę luzu. :) –

1

Swift 3.0 wersja rmaddy's answer:

let window = UIApplication.shared.windows.first 

ja też powinien dodać, że od iOS 8.0 UIAlertController zastąpił UIAlertView i będąc kontrolerem widoku można już zmierzyć się z kwestią nowych tworzonych okien.

0

Swift 3

class func sharedInstance() -> AppDelegate{ 
     return UIApplication.shared.delegate as! AppDelegate 
    } 
Powiązane problemy