2011-10-18 2 views
2

우선 iOS 5에 대해 이야기 할 수 있습니까? 아니면 여전히 NDA를 받고 있습니까? 우리가 그것에 대해 이야기 할 수 없다면, 내 질문을 무시하십시오.UIPopoverController가 모달로 제공됩니다. iOS 5에서 작동하지 않습니다.

iOS 5가 설치된 iPad에서 내 응용 프로그램을 테스트하면 "모달"팝업으로 문제가 있음을 발견했습니다.이 기능을 외부로 두드리는 것으로 닫을 수 있습니다. 즉, 모달이 아닙니다. 나는 내가 뭘 잘못하고 있는지 전혀 모른다. 이있는 viewDidLoad의이 라인이있는 팝 오버 내부의

AddProjectViewController *addProjectViewController = [[AddProjectViewController alloc] initWithStyle:UITableViewStyleGrouped]; 
[addProjectViewController setDelegate:self]; 

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:addProjectViewController]; 
[addProjectViewController release]; 

CGRect popoverFrame = [sender frame]; 

UIPopoverController *tempPopover = [[UIPopoverController alloc] initWithContentViewController:navController]; 
[tempPopover presentPopoverFromRect:popoverFrame inView:[self view] permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
self.currentPopover = tempPopover; 
[tempPopover release]; 
[navController release]; 

뷰 컨트롤러 :

보기 제어는이 코드로 팝 오버를 연다.

- (void)viewDidLoad 
{ 
    [self setModalInPopover:YES]; 

    // Do other stuff 
} 

누락 된 항목이 있습니까?

답변

10

발견했습니다. 될 것입니다 당신이보기를 알고있는 사용자 지정보기 컨트롤러를 사용하는 경우

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    [self setModalInPopover:YES]; 
} 
+2

나에게 버그처럼 보입니다. 뷰 컨트롤러를 생성하는 코드에서이 값을 외부 적으로 설정하기 때문에 viewDidAppear 메서드에서'[self setModalInPopover : [self isModalInPopover]];를 넣어야했습니다. – zeroimpl

0

내비게이션 컨트롤러의 modalInPopover 속성 설정을 시도 했습니까? 이것은 Popover에 의해 실제로 "소유"된 뷰 컨트롤러이므로 Popover가 해당 모달인지 여부를 확인하기 위해 해당 modalInPopover 속성을 사용할 것으로 기대합니다.

아마도 UINavigationController은 iOS 4.x의 현재 표시된 하위보기 컨트롤러에 전달했을 것입니다.

+0

당신은 그것이 경우에 작동해야한다는 의미를 잘하게됩니다 : 당신의 팝 오버 컨트롤러를 생성하는 코드에서

- (BOOL) popoverControllerShouldDismissPopover:(UIPopoverController *) popoverController { return NO; } 

을 내비게이션 컨트롤러의 modalInPopover 속성을 설정합니다. 그러나 그것은 그런 식으로 작동하지 않습니다. 그래도 해결책을 찾았습니다. 나는 곧 게시 할 것이고, 다른 사람들에게 도움이 될 것이다. – strave

1

이 승인 된 대답은 작동합니다 다음 팝 오버가 모달로의 setModalInPopover 할당이 포함 된 뷰 컨트롤러의 viewDidAppear 방법 안에 있어야 a popover에서. 그러나 프로그래밍 방식으로 만든 일반보기 컨트롤러 또는 viewDidAppear 메서드는 어떤 이유로 든 재정의 할 수있는보기 컨트롤러를 사용하는 경우 UIPopoverControllerDelegate 프로토콜을 클래스에 구현하고 해당 클래스에 Popover 대리자를 설정 한 다음 popoverControllerShouldDismissPopover에 NO를 반환하십시오.

예 UIPopoverControllerDelegate 구현하는 일부 클래스에서

:

UIPopoverController * pc = initialize and setup 

pc.delegate = instance of class that impleements UIPopoverControllerDelegate