2015-03-20 4 views
6

Я хотел бы добавить вид в UIWindow с помощью следующего кода:Как добавить вид в 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]; 

Этот код не работает. Я хотел клонировать свойство UIAlertView. Он будет всплывать поверх всего, когда мы вызываем метод [alertViewInstance show];.

Пробовал это так:

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

установить его '' rootViewController' и makeKeyAndVisible'; в вашем приложении (после do-finish-lauch!), если вы не используете 'UIWindow', как это, это означает, что вам не нужно использовать' UIWindow' для реальной задачи. – holex

ответ

3

Ваши окна необходимо иметь контроллер представления корня.

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

Это похоже на работу, но новый вид охватывает весь экран. Это рама {{0,0) (320,568)} –

+0

Да viewcontroller.view охватывает весь экран.aView, который имеет вид, который вы хотите, имеет размер 100, 100 –

+0

Что я хотел сделать, так это заставить его выглядеть как alertView. Прозрачный фон. Но он будет перекрывать viewController viewController, из которого вызывается этот код. –

2

Вы можете попробовать ниже кода ... для добавления подвида в окно

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

// Удаление

[aView removeFromSuperview]; 

Надеются, что это помогает! ..

+0

Это не работает. Белый экран - это все, что я вижу. –

2

Я думаю, что вам не хватает этого. проверьте один раз.

[self.window makeKeyAndVisible]; 
+0

Это все ... другие методы работают, пока у вас есть это – Magoo

5

Попробуйте с этим кодом:

- (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

Не работает. –

+0

ха? это будет работать. Я использую этот код для пользовательского (поддельного) popoverView или alertView. Вы можете добавить этот код ниже: [window bringSubviewToFront: aView]; – TienLe

+0

Я только что протестировал и все еще работает: http://i.cubeupload.com/CpdTn0.png – TienLe

1

UIAlertView создает другой UIWindow и установить это окно как основное окно при вызове метода показа. Поэтому, если вы хотите показать свое собственное представление предупреждения, создайте экземпляр UIWindow и добавьте свой настраиваемый вид предупреждений в это вновь созданное окно.

6

Попробуйте этот код:

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

Замените следующий код:

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

Если вы используете UINavigationController Использование:

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

Если вы используете UITabBarController Использование:

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

В AppDelegate вы можете напрямую назначить вид на окно. В appDelegatedidFinishLaunchingWithOptions Методе использования:

[self.window addSubview:aView]; 

Надеется, что это помогает ...

+1

Действительно ли это работает? Здесь я ничего не вижу. – Johan

+0

Я использовал этот код во многих проектах, и он работает. – Vishal16

3

Вы можете добавить вид, используя следующие

[[[UIApplication sharedApplication] keyWindow] addSubview:YOUR_VIEW];