2

まず、ここで iOS 5 について話してもらえますか? それともまだNDA中ですか?それについて話すことができない場合は、私の質問を無視してください。

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
}

何か足りないものはありますか?

4

3 に答える 3

10

見つけた。setModalInPopover 割り当ては、ポップオーバーをモーダルにするには、埋め込みビュー コントローラーの viewDidAppear メソッド内にある必要があります。

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

    [self setModalInPopover:YES];
}
于 2011-10-19T08:13:48.767 に答える
1

承認された回答は、ビューがポップオーバーに含まれることを認識しているカスタムビューコントローラーを使用している場合に機能します。ただし、プログラムで作成された汎用View Controllerを使用している場合、またはviewDidAppear何らかの理由でメソッドをオーバーライドできないView Controllerを使用している場合UIPopoverControllerDelegateは、クラスにプロトコルを実装し、ポップオーバーデリゲートをそのクラスに設定してNOを返すこともできます。 、でpopoverControllerShouldDismissPopover

UIPopoverControllerDelegateを実装する一部のクラスでは、次のようになります。

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

ポップオーバーコントローラーを作成するコードでは、次のようになります。

UIPopoverController * pc = initialize and setup 

pc.delegate = instance of class that impleements UIPopoverControllerDelegate
于 2011-11-18T19:25:57.670 に答える