8

新しいストーリーボード機能を使用しようとしていますが、ストーリーボードの関係について混乱していますか?それらはIBOutletsとどのように異なりますか?

また、独自のUIViewControllerサブクラスに独自の関係を追加するにはどうすればよいですか?

ドキュメントを調べてみましたが、あまり見つかりません。

4

3 に答える 3

9

私が理解している方法は次のとおりです。関係はiOSの「親子」関係を表す方法であり、それはかなり再帰的に見えますが、親子関係の例はUIViewControllerを含むUIViewControllerコンテナです。

それはとにかく理論です-それはUINavigationControllerを使用してよりよく理解されます。通常のUITableViewのドリルダウンとポップオフを実行できるように、「スタック」メタファーに通常のUIViewControllerができるだけ多く含まれているため、「コンテナ」と呼ばれます。

重要な点は、UINavigationControllerとスタック内の最初のUIViewControllerの間のセグエには「関係」があり、残りのすべてのUIViewControllerの間のセグエは単なる通常のプッシュセグエであるということです。

同じことがUISplitViewControllerでも明らかです。起動時に2つのビューコントローラー(コンテンツビューコントローラーと呼ばれることもあります)が必要であり、これらは親UISplitViewController(コンテナー)と2つの通常の(コンテンツ)ビューコントローラーの間に接続されています

(したがって、関係はIBOutletsのようなものではなく、セグエのようなものです。標準のView Controllerコンテナーの「segues」カテゴリーにも含まれます)

現在、標準のView Controllerコンテナーをサブクラス化することは許可されていませんが、カスタムView Controllerコンテナーを作成することは許可されていますが、カスタムViewControllerコンテナーで関係を定義することはできません!!!!! !!!!!!

つまり、「自分のコントローラーで使用できますか?」答えはまだ不明です(少なくとも私には、ドキュメントはせいぜい薄いです)

于 2012-01-23T14:41:48.440 に答える
1

次のようにUIStoryboardSegueのサブクラスを作成します。

@implementation JTARelationshipSegue

- (void)perform
{
  return;
}

@end

2つのオブジェクト間にカスタムセグエを作成し、クラスをJTARelationshipSegueとして設定します。ビューコントローラで、ビューコントローラに次のようなセグエを実行させます。

- (void)viewDidLoad
{
  ...
  [self performSegueWithIdentifier:@"addChild" sender:self];
}

インターフェイスビルダーでセグエ識別子をaddChildに設定する必要があります。

prepareForSegue:sender次のように、現在のViewControllerの子としてsegues宛先ViewControllerを追加するように実装します。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
  UIViewController *destination = [segue destinationViewController];
  [self addChildViewController:destination];
  ...
}

作成する子ごとに異なるセグエ識別子(または特定のViewControllerを識別する別の方法)が必要になります。

これにより、ストーリーボードファイルがより美しく、読みやすくなりますが、他のView Controllerをロードして、Viewの子がloadメソッドを実行したように追加する方がよい場合があります。

- (void)viewDidLoad
{
   [self addChildViewController:
         [[self storyboard] 
          initiateViewControllerWithIdentifier:@"myIdent"]];
...
}
于 2013-08-22T15:25:20.193 に答える
-1

私は自分のサイトでストーリーボードを使用する方法についていくつかのチュートリアルを書きました...

チュートリアルのパート1

チュートリアルのパート2

おそらくそれは少し役立つでしょうか?本質的に、Segueリレーションシップは、ストーリーボード上の2つのアイテム間のリンクの識別子を提供します。これらの識別子を使用して、動作を管理できます。

于 2011-11-13T20:34:32.130 に答える