2011-10-18 38 views
2

まず、ここでiOS 5についてお話できますか?それともまだNDAに入っていますか? 私たちがそれについて話すことができないならば、私の質問を無視してください。UIPopoverControllerがモーダルに表示されていますが、iOS 5では動作しません。

iOS 5がインストールされたiPadで私のアプリをテストすると、「モーダル」ポップオーバーに関する問題が発見されました。これを外して閉じることができます。つまり、モーダルではありません。私は何が間違っているのか分かりません。

ビューコントローラは、このコードでポップオーバーを開き:

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]; 

ポップオーバーの内部のビューコントローラがそれのviewDidLoad年代にこのラインを有しています。

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

    // Do other stuff 
} 

には何か不足しているものがありますか?

答えて

10

私はそれを見つけました。なるだろうビューを知っているカスタムビューコントローラを使用している場合

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

    [self setModalInPopover:YES]; 
} 
+2

私にはバグのようです。 View Controllerを作成するコードの外部にこの値を設定しているので、 '{self isModalInPopover:[self isModalInPopover]];をviewDidAppearメソッドに配置する必要がありました。 – zeroimpl

0

ナビゲーションコントローラのmodalInPopoverプロパティを設定しようとしましたか?これは実際にはポップオーバーによって「所有」されているビューコントローラーなので、PopoverはそのmodalInPopoverプロパティを使用してモーダルであるかどうかを判断します。

多分UINavigationControllerは、これを現在表示されているiOS 4.xの子ビューコントローラに渡しました。

+0

あなたは正しいです、それがあれば動作するはずという意味がありますナビゲーションコントローラのmodalInPopoverプロパティを設定しました。しかし、それはそのようには機能しません。私は解決策を見つけました。私はすぐにそれを掲示し、他人を助けるかもしれない。 – strave

1

が承認答えは動作します:ポップオーバーがモーダルであるためにsetModalInPopover割り当てが埋め込まれたビューコントローラのviewDidAppear方法の中でなければなりませんa popoverで。ただし、プログラムによって作成された汎用ビューコントローラ、またはviewDidAppearメソッドが何らかの理由でオーバーライドできないビューコントローラを使用している場合は、クラスにUIPopoverControllerDelegateプロトコルを実装し、そのクラスにポップオーバーデリゲートを設定し、 popoverControllerShouldDismissPopoverにNOを返します。あなたのポップオーバーコントローラを作成するコードで

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

:UIPopoverControllerDelegateを実装し、いくつかのクラスで

UIPopoverController * pc = initialize and setup 

pc.delegate = instance of class that impleements UIPopoverControllerDelegate 
関連する問題