2015-03-20 16 views
6

Chciałem dodać widok w UIWindow z następującego kodu:Jak dodać widok w UIWindow?

AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate; 
UIWindow *window = delegate.window; 
UIView *aView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)]; 
aView.backgroundColor = [UIColor blackColor]; 
[window addSubview:aView]; 

Ten kod nie działa. Chciałem sklonować własność UIAlertView. Będzie nad wszystkim, gdy zadzwonimy do metody [alertViewInstance show];.

Tried to także:

UIView *aView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)]; 
    UIWindow* window = [UIApplication sharedApplication].keyWindow; 

    if (!window) { 
     window = [[UIApplication sharedApplication].windows objectAtIndex:0]; 
    } 

    [window addSubview:aView]; 
    [window bringSubviewToFront:aView]; 
+0

ustawić jego 'rootViewController' i' makeKeyAndVisible'; w twojej aplikacji (po did-finish-lauch!) jeśli nie używasz 'UIWindow' w ten sposób, oznacza to wyraźnie, że nie musisz używać' UIWindow' dla rzeczywistego zadania. – holex

Odpowiedz

3

Twoje okna musi mieć kontroler widoku głównego.

AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate; 

UIWindow *window = delegate.window; 
UIViewController *controller = [[UIViewController alloc] init]; 
window.rootViewController = controller; 
UIView *aView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)]; 
aView.backgroundColor = [UIColor blackColor]; 
[controller.view addSubview:aView]; 
+0

To wydaje się działać, ale nowy widok obejmuje cały ekran. Jego ramka to {(0,0) (320,568)} –

+0

tak viewcontroller.view obejmuje cały ekran.aView, który jest pożądanym widokiem ma rozmiar 100, 100 –

+0

To, co chciałem zrobić, sprawiło, że wyglądało to jak alertViewView. Przezroczyste tło. Ale będzie nakładać się z viewController viewController, z którego ten kod jest wywoływany. –

2

Można spróbować poniżej kodu ... za dodanie podrzędny do okna

UIView *aView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)]; 
aView.backgroundColor = [UIColor blackColor]; 
[[UIApplication sharedApplication].keyWindow addSubview:aView]; 

// Usunięcie

[aView removeFromSuperview]; 

Nadzieję, że to pomaga ..!

+0

To nie działa. Biały ekran to wszystko, co mogę zobaczyć. –

2

Myślę, że tęsknisz za tym. sprawdź raz.

[self.window makeKeyAndVisible]; 
+0

To jest to ... inne metody działają tak długo, jak masz to – Magoo

5

Spróbuj z tym kodem:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    UIWindow* window = [UIApplication sharedApplication].keyWindow; 
    if (!window) { 
     window = [[UIApplication sharedApplication].windows objectAtIndex:0]; 
    } 

    UIView *aView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; 
    aView.backgroundColor = [UIColor redColor]; 
    aView.center = window.center; 
    [window insertSubview:aView aboveSubview:self.view]; 
    [window bringSubviewToFront:aView]; 
} 
+0

Nie działa nadal. –

+0

huh? to będzie działać. Używam tego kodu do niestandardowego (fałszywy) popoverView lub alertView. Możesz dodać ten kod poniżej: [window bringSubviewToFront: aView]; – TienLe

+0

Właśnie przetestowałem i nadal działa: http://i.cubeupload.com/CpdTn0.png – TienLe

1

UIAlertView tworzy inny UIWindow i ustawić to okno jako kluczowy oknem podczas wywoływania metody show. Jeśli chcesz wyświetlić własny widok alertu, utwórz instancję UIWindow i wyświetl swój niestandardowy widok alertu w nowo utworzonym oknie.

6

Spróbuj kod:

window = [[UIApplication sharedApplication].windows lastObject]; 

Wymień następujący kod:

window = [[UIApplication sharedApplication].windows objectAtIndex:0]; 
4

Jeśli używasz UINavigationController przeznaczenie:

[self.navigationController.view.window addSubview:aView]; 

Jeśli używasz UITabBarController przeznaczenie:

[self.tabBarController.view.window addSubview:aView]; 

W AppDelegate można bezpośrednio przypisać widok do okna. W appDelegatedidFinishLaunchingWithOptions metody użytkowania:

[self.window addSubview:aView]; 

nadzieję, że to pomaga ...

+1

Czy to naprawdę działa? Nic tu nie widzę. – Johan

+0

Użyłem tego kodu snipped w wielu projektach i to działało. – Vishal16

3

Możesz dodać widok użyciu następujących

[[[UIApplication sharedApplication] keyWindow] addSubview:YOUR_VIEW]; 
Powiązane problemy