3

ポップオーバーに表示される比較的複雑な UI があります (コードからすべてのレイアウトと関係を実行するのが面倒なほど複雑です) が、それを呼び出すボタンが作成され、コードから親ビュー (ストーリーボードに存在する) に配置されます。 .

親ビューのviewcontrollerオブジェクトからポップオーバーコンテンツVCへのポップオーバーセグエを作成してから、performSegueWithIdentifierでこれをトリガーしようとしました。これはほとんど機能しますが、popOver のアンカーをコードから設定する方法がわからないため、間違った場所に表示されます (画面の下部に押しつぶされます)。

popOver セグエのアンカーを動的に設定する方法はありますか? または UIPopOverController オブジェクトを作成して、ストーリーボードにまとめたビューを取得できますか? または、私が見ていない他の明らかな方法はありますか?

優しくしてください、私はここに来たばかりです。

iPad iOS5.1 XCode4.3.2

4

1 に答える 1

8

アレックス、

あなたがやろうとしていることを完全に理解しているかどうかはわかりませんが、私が理解していると思うことから突き刺してみましょう.

あなたが引用したのと同じ理由 (ビューの複雑さなど) で、私はしばしばストーリーボードでビューを構築し、いくつかのアクションからそれらをロードします。あなたができることは、次のような識別子で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:は、セグエの代わりに呼び出す明示的なアクションを使用することです。

それが役立つことを願っています。あなたがやろうとしていることを誤解している場合はお知らせください。

よろしくお願いします。

于 2012-06-05T17:46:40.760 に答える