2013-04-09 5 views
3

Я пишу приложение для iPad, и я пытаюсь отобразить второй UIWindow поверх главного окна моего приложения. Главное, что я пытаюсь сделать, это создать окно регистрации (how to present a login, with UISplitViewController?), и кажется, что создание второго окна здесь может быть хорошим вариантом.проблема с отображением другого UIWindow

Я сделал очень простое приложение, чтобы попробовать это. Когда пользователь нажимает кнопку, я пытаюсь показать второе окно. Вот код:

- (IBAction)showOtherWindow:(id)sender { 
    UIWindow* otherWindow = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 

    otherWindow.hidden = NO; 
    otherWindow.clipsToBounds = YES; 
    otherWindow.windowLevel = UIWindowLevelStatusBar; 
    otherWindow.backgroundColor = [UIColor redColor]; 
    [otherWindow makeKeyAndVisible]; 
} 

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

ответ

25

Если вы находитесь в коде ARC, ваше окно освобождается сразу после получения showOtherWindow:. Попробуйте назначить otherWindow ivar в постоянном объекте.

+0

ARGH. Не могу поверить, что я сделал подобную мозгу ошибку. Конечно, именно поэтому я этого не вижу. Я приму этот ответ, как только мне позволено. –

+0

Вау, не принимается * и * проголосовать. Это научит меня отвечать на вопрос @DanMorrow на самом деле спросил! –

+1

Довольно уверен, что вам разрешено принять это как ответ к настоящему времени ;-) –

0

Назначьте указатель окна переменной экземпляра __strong (ivar) или сильным свойством. Установите ivar или свойство на nil после того, как вы отпустите окно.

0

В iOS у вас есть одно окно, которое заполняет весь экран. Чтобы сделать то, что вы хотите, вы можете создать UIViewController/UIView и открыть его в модальном режиме.

Из основного View Controller вы можете сделать что-то вроде

UILoginViewController *login = [[UILoginViewController alloc] init]; 
login.modalPresentationStyle = UIModalPresentationFormSheet; // or whatever you prefer 

login.completionWithItemsHandler = hdl; 

[self presentViewController:login animated:YES completion:nil]; 
Смежные вопросы