iOS 5.0以降を対象とした現在のプロジェクトでは、ユーザーが現在画面に描画されているもののレイアウトを選択できるようにするいくつかのボタンを備えたビューを表示したいと思います。
iPhoneとiPodTouchでは、次のように呼び出して、選択ビューコントローラに画面全体を引き継がせます。
[self presentViewController:choiceController animated:YES completion:nil];
iPadでは、次のように呼び出すことで、同じViewControllerのビューをポップオーバーで表示します。
[self setChooseLayoutPopover:[[UIPopoverController alloc] initWithContentViewController:choiceController]];
[[self chooseLayoutPopover] setDelegate:self];
[[self chooseLayoutPopover] setPopoverContentSize:CGSizeMake(320.0, 460.0)];
[[self chooseLayoutPopover] presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
どちらの場合も、2つの却下ブロックを選択ビューコントローラーに渡します。1つはレイアウトが実際に選択されたとき用で、もう1つはユーザーが操作をキャンセルしたとき用です。iPadではポップオーバーの範囲外に触れると実際にキャンセルされますが、iPhoneとiPodTouchではキャンセルボタンが表示されます。これも機能します。
iPhoneとiPodTouchで、選択を行うための私の却下ブロックは、次のように呼び出して機能します。
[[self presentingViewController] dismissViewControllerAnimated:YES completion:[self dismissBlockDone]];
しかし、iPadpresentingViewController
では常にnilであり、上記の呼び出しを使用して自分で表示しているView Controllerにポインターを渡しても、iPadでは何も起こりません。
-(void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
提示するViewControllerをポップオーバーのデリゲートとして実装および設定しました。このメソッドは、ユーザーがポップオーバーの外側に触れたときに呼び出されますが、ユーザーが実際に選択ボタンに触れた後に何を呼び出すかがわかりません。選択した値を設定することはできますが、後でポップオーバーから抜け出す方法がわかりません。
助言がありますか?