2013-04-09 4 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:이 반환 된 후 즉시 창 할당이 취소됩니다. 영속 객체의 ivar에 otherWindow을 할당 해보십시오.

+0

아아 뭔가를 할 수 있습니다. 나는 그처럼 뇌사 상태의 실수를 저질렀다는 것을 믿을 수 없다. 물론 그것이 내가 그것을 보지 못하는 이유입니다. 내가 허락하자마자이 대답을 받아 들일거야. –

+0

와우, 받아 들여지지 않는 * 및 * 다운 투표. 그것은 @DanMorrow가 실제로 묻는 질문에 대답하도록 가르쳐 줄 것입니다! –

+1

지금까지 대답으로 받아 들일 수 있는지 분명히 알고 있습니다. ;-) –

0

__strong 인스턴스 변수 (ivar) 또는 강력한 속성에 창의 포인터를 할당하십시오. 창을 닫은 후에 ivar 또는 속성을 nil로 설정하십시오.

0

iOS에는 모든 화면을 채우는 하나의 창이 있습니다. 원하는 것을하기 위해 UIViewController/UIView를 만들고 모달 모드로 열 수 있습니다.

메인 뷰 컨트롤러에서 당신은

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

login.completionWithItemsHandler = hdl; 

[self presentViewController:login animated:YES completion:nil];