アレックス、
あなたがやろうとしていることを完全に理解しているかどうかはわかりませんが、私が理解していると思うことから突き刺してみましょう.
あなたが引用したのと同じ理由 (ビューの複雑さなど) で、私はしばしばストーリーボードでビューを構築し、いくつかのアクションからそれらをロードします。あなたができることは、次のような識別子でView Controllerをインスタンス化することです:
FancyViewController *controller = [[self storyboard]
instantiateViewControllerWithIdentifier:@"FancyViewController"];
これは、FancyViewController という UIViewController サブクラスを作成し、ストーリーボードでビュー コントローラーのタイプを設定したことを前提としています。
これで、ビュー コントローラーをポップオーバー コントローラーに表示したり、ナビゲーション スタックにプッシュしたりできます。ストーリーボードでView Controllerの識別子を設定したことを確認するだけです。
また、ポップオーバー コントローラーを使用し、アクションがトリガーされるたびにビュー コントローラーのプロパティを更新する場合は、ビュー コントローラーを 1 回インスタンス化することをお勧めします。したがって、ポップオーバーをトリガーするボタンをタップする場合、コードは次のようになります。
- (IBAction)didTapButtonToShowFancyViewController:(id)sender
{
if (![self fancyViewController])
{
// fancyViewContrller is a property of type FancyViewController *
fancyViewController = [[[self storyboard]
instantiateViewControllerWithIdentifier:@"FancyViewController"];
// fancyViewPopoverController is also a property
fancyViewPopoverController = [[UIPopoverController alloc]
initWithContentViewController:fancyViewController];
}
// Perform setup on the fancy controller you want to do every
// time the action gets triggered here. Do initialization in the if
// block above.
// Now display the popover from the sender's frame. I'm assuming the
// sender is a UIButton.
[fancyViewPopoverController presentPopoverFromRect:[sender valueForKey:@"frame"]
inView:[self view]
permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
ポップオーバーの「アンカー」を動的に設定する唯一の方法presentPopoverFromRect:permittedArrowDirections:animated:
は、セグエの代わりに呼び出す明示的なアクションを使用することです。
それが役立つことを願っています。あなたがやろうとしていることを誤解している場合はお知らせください。
よろしくお願いします。