4

図に示すように、メイン ビュー コントローラーと 2 つの詳細ビュー コントローラーを含む単純なストーリーボードがあります。

質問 1 - SequeA が提示する DetailA のコードはどこにありますか

質問 2 - AppDelegate のコードで、アプリ内にあるすべての ViewControllers の配列を作成する必要があります - どうすればその配列を取得できますか? - ストーリー ボードにありますが、プログラムでアクセスするにはどうすればよいですか。

次のようにして MainViewController を取得できます - myViewControllerMain = (ViewControllerMain*) self.window.rootViewController;

しかし、詳細ビューコントローラー (a & b) にアクセスする方法がわかりません

質問 3 - MainViewController がインスタンス化されるときに DetailA がインスタンス化されますか、それとも Seque が「トリガー」されるときにインスタンス化されますか (ここで正しい言葉は何ですか - 呼び出されますか?)

MainViewController と 2 つの詳細ビューを持つ StoryBoard

4

3 に答える 3

1

リンクを読むと、あなたが尋ねたようにセグエを実行するためのコードがないことがわかります。。。XCode / Interface Builder)は、他の言語でInterface Builderを使用している場合に理解できるように、コードジェネレーターではありません。コードを記述していないため、何も見つかりません。そうは言っても、プログラムでセグエを呼び出すことができます。

ViewControllerのリストについては、あなたが望んでいる方法でこれを行う方法はないと思います。ViewControllerは、特定のタイプの単なるクラスです。あなたができる唯一のことは、ロードされたすべてのクラスのリストを取得し、それらがビューコントローラであるかどうかを確認しながら反復することですが、これは遅くなり、なぜあなたがそれをやりたいのかわかりません、結局のところこれが唯一の方法です実行されるコードはプロジェクトに含まれ、プロジェクトにどのコードがあるかを確実に知っていますか?

セグエが実行されると、ViewControllerがインスタンス化されます。

于 2013-01-30T16:01:30.550 に答える
1

1) IB に接続した場合、コードはありません (ストーリーボードを記述する XML ファイル以外)。

2) インスタンス化するまで、他のコントローラーにはアクセスできません。

3) セグエの実行時にインスタンス化されます。

アプリのデリゲートですべてのコントローラーの配列を作成する必要があると思うのはなぜですか?

于 2013-01-30T15:53:54.670 に答える
0

あなたは尋ねました:

質問#1 -SegueAがDetailAに提示するコードはどこにありますか?

プログラムでsegueAを呼び出す場合(呼び出しperformSegueWithIdentifierなど)、そのコードはマスタービューコントローラーにあります。ただし、多くの場合、プログラムで呼び出す必要はありません。InterfaceBuilderでセグエを作成するときに、マスタービューのボタンなどのコントロールからリンクしていることが多いため、リンクしないからです。セグエを開始するには、プログラムで何かを行う必要があります。ただし、セグエAを呼び出すと、オプションの関連shouldPerformSegueWithIdentifier(iOS 6以降の場合)prepareForSegueがマスタービューコントローラーで呼び出されます。

質問2 -AppDelegateのコードで、アプリ内にあるすべてのViewControllerの配列を作成する必要があります-その配列を取得するにはどうすればよいですか?-ストーリーボードにありますが、プログラムでアクセスするにはどうすればよいですか。

次のようにしてMainViewControllerを取得できます-

myViewControllerMain = (ViewControllerMain*) self.window.rootViewController;

しかし、詳細ビューコントローラにアクセスする方法がわかりません(a&b)

通常、ビューコントローラの配列を維持する必要はありません(カスタムコンテナビューコントローラを除いて、それでも、自分で行う必要がない場合もあります)。ただし、アプリデリゲートのプロパティにアクセスする必要がある場合は、次のようにすることができます。

YourAppDelegate *appDelegate = (YourAppDelegate *)[UIApplication sharedApplication].delegate;
// you can now access properties of the `appDelegate`

そうは言っても、詳細コントローラーAまたは詳細コントローラーBがマスターからビューコントローラーのリストを取得することが推奨される状況を考えるのは難しいです。あなたは本当にあなたが解決しようとしているビジネス上の問題を説明する必要があります。通常、デリゲートプロトコルを実行するか、通知プロセスを使用します。解決しようとしている問題によって異なります。ただし、AまたはBがマスターからビューコントローラのリストを取得する必要がある場合は、デザインをよく検討する必要があります。

質問#3 -MainViewControllerがインスタンス化されたときにDetailAがインスタンス化されますか、それともSequeが「トリガー」されたときにインスタンス化されますか(ここで正しい単語は何ですか-呼び出されますか?)

カスタムコンテナや埋め込みセグエを除いて、基本的なプロセスは次のとおりです。

  • セグエがトリガーされます。
  • shouldPerformSegueWithIdentifieriOS 6ではオプションで呼び出されます。その場合NOは、ここで停止します。
  • 宛先コントローラーがインスタンス化されます。
  • prepareForSegueが呼び出され、ソースコントローラーから宛先コントローラーに情報を渡すことができます。
  • 次に、宛先のViewControllerに関連付けられたビューが作成されます。
  • viewDidLoad宛先で呼び出されます(持ち帰りメッセージは、ソースのなど、このポイントより前にこの宛先ビューのビュー/コントロールを操作しようとしないでくださいprepareForSegue)。
  • そうして初めて、宛先ビューはそのレイアウト、外観の呼び出しなどを完了します。

参照:

于 2013-01-30T16:15:22.613 に答える