あなたは尋ねました:
質問#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が「トリガー」されたときにインスタンス化されますか(ここで正しい単語は何ですか-呼び出されますか?)
カスタムコンテナや埋め込みセグエを除いて、基本的なプロセスは次のとおりです。
- セグエがトリガーされます。
shouldPerformSegueWithIdentifier
iOS 6ではオプションで呼び出されます。その場合NO
は、ここで停止します。
- 宛先コントローラーがインスタンス化されます。
prepareForSegue
が呼び出され、ソースコントローラーから宛先コントローラーに情報を渡すことができます。
- 次に、宛先のViewControllerに関連付けられたビューが作成されます。
viewDidLoad
宛先で呼び出されます(持ち帰りメッセージは、ソースのなど、このポイントより前にこの宛先ビューのビュー/コントロールを操作しようとしないでくださいprepareForSegue
)。
- そうして初めて、宛先ビューはそのレイアウト、外観の呼び出しなどを完了します。
参照: