Второе окно UIWindow не отображается (iPad) - PullRequest
1 голос
/ 29 апреля 2011

Я пытаюсь создать два UIWindows, потому что я хотел бы, чтобы два UINavigationController отображались на экране одновременно в моем приложении.Я инициализирую два окна в моем делегате приложения, но отображается только одно окно.Кто-нибудь знает, почему это так?

Вот код, который я использовал:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    UIViewController * controller1 = [[UIViewController alloc] init];
    [controller1.view setBackgroundColor:[UIColor grayColor]];
    UINavigationController * nav1 = [[UINavigationController alloc] initWithRootViewController:controller1];
    [window addSubview:nav1.view];
    [window makeKeyAndVisible];

    UIWindow * window2 = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    UIViewController * controller2 = [[UIViewController alloc] init];
    [controller2.view setBackgroundColor:[UIColor yellowColor]];
    UINavigationController * nav2 = [[UINavigationController alloc] initWithRootViewController:controller2];
    [window2 addSubview:nav2.view];
    [window2 makeKeyAndVisible];


    NSLog(@"%@", [[UIApplication sharedApplication] windows]);



    return YES;

}

Серый из первого окна виден, но желтый извторой нет.Выходные данные:

"<UIWindow: 0x591e650; frame = (0 0; 768 1024); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x591e7a0>>", "<UIWindow: 0x5923920; frame = (0 0; 100 100); layer = <CALayer: 0x59239a0>>"

, что означает, что второе окно создано и добавлено в приложение, но просто не отображается.Кто-нибудь знает, почему это так?

Заранее спасибо!

Ответы [ 5 ]

1 голос
/ 20 мая 2013

Два свойства UIWindow windowLevel равны, все они UIWindowLevelNormal.Если вы хотите, чтобы второй UIWindow отображал шрифт первого UIWindow, вам следует установить значение windowLevel для второго UIWindow.Например:

window2.windowLevel = UIWindowLevelNormal + 1;

PS:

[window makeKeyAndVisible];  
...  
[window2 makeKeyAndVisible];

Одновременно может быть только один keyWindow. Окно клавиш предназначено для приема с клавиатуры и других устройств без касаниясвязанные события.Ключевым окном может быть только одно окно за раз.

0 голосов
/ 14 сентября 2015

Это может быть очень старый пост, но я столкнулся с той же проблемой.Некоторые ошибки в коде уже были устранены, но главная проблема, с которой мы столкнулись, заключается в том, как вы создаете экземпляр UIWindow.

Вот пример Swift, как правильно отобразить другой UIWindow.

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow? = UIWindow(frame: UIScreen.mainScreen().bounds)

    let newWindow = UIWindow(frame: UIScreen.mainScreen().bounds) 
    // save a reference to your Window so it won't be released by ARC

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        self.window!.rootViewController = SomeViewController()
        self.window!.makeKeyAndVisible()

        // in your example you have created the window inside this method,
        // which executes correctly and at the end of this method just releases the window,
        // because you never saved the reference to the window
        self.newWindow.rootViewController = SomeOtherViewController()
        self.newWindow.windowLevel = UIWindowLevelStatusBar + 1.0
        self.newWindow.hidden = false

        return true
    }
}

КстатиВам не нужно создавать UIWindow в AppDelegate.Это зависит от вашего поведения кода.

0 голосов
/ 30 апреля 2011

Я обнаружил, как заставить отображаться второе окно UIWindow.Необходимо установить для свойства clipsToBound значение YES.В противном случае вид из одного окна будет полностью перекрывать другой вид.Два окна были правильно добавлены и видны в конце концов.

0 голосов
/ 06 июня 2012

попробуйте этот код ...

id delegate = [[UIApplication sharedApplication] delegate];
[[delegate FirstView] presentModalViewController:SecondView animated:YES];
0 голосов
/ 29 апреля 2011

Просто используйте UISplitViewController.

или попробуйте MGSplitVIewController , если вам нужно выполнить настройку.Это может иметь то, что вам нужно.

...