您的问题:
问题1 - SegueA将呈现DetailA的代码位于何处?
如果您是以编程方式调用segue A(例如调用performSegueWithIdentifier
),则该代码位于主视图控制器中。但通常情况下,您根本不需要以编程方式调用它,因为当您在Interface Builder中创建segue时,通常会将其链接到某个控件(例如主视图中的按钮),因此您无需以编程方式执行任何操作来启动segue。但是,当您调用segue A时,可选的关联shouldPerformSegueWithIdentifier
(适用于iOS 6及更高版本)和prepareForSegue
将在主视图控制器中调用。
Question #2 - In my code for the AppDelegate I need to create an array of all the ViewControllers that are in the App - How can I get that array? - It is in the story board but how do I programmatically access it.
I can get the MainViewController by doing the following -
myViewControllerMain = (ViewControllerMain*) self.window.rootViewController
but I don't know how to access the detail view controllers (a & b)
通常情况下,您不需要维护视图控制器的数组(可能是自定义容器视图控制器的例外情况,即使是这样,有时候也不必自己这样做)。但是,如果您需要访问应用程序委托的某个属性,可以像下面这样操作:
YourAppDelegate *appDelegate = (YourAppDelegate *)[UIApplication sharedApplication].delegate
// you can now access properties of the `appDelegate`
说到这一点,我很难想象在哪些情况下建议Detail Controller A或Detail Controller B从主控制器中检索视图控制器列表。您真的应该解释一下您要解决的业务问题。通常,您会执行某些委托协议或使用某些通知过程。它因解决的问题而异。但是,如果A或B需要从主控制器获取视图控制器列表,则应仔细查看设计。
“问题#3” - 当实例化MainViewController时,是否实例化DetailA,还是在Seque“触发”(这里的正确单词是什么-调用?)
除自定义容器和/或嵌入式segue外,基本过程如下:
- 触发segue;
- iOS 6中可选调用
shouldPerformSegueWithIdentifier
,如果返回NO
则停止执行;
- 实例化目标控制器;
- 调用
prepareForSegue
,允许您将信息从源控制器传递到目标控制器;
- 创建与目标视图控制器相关联的视图;
- 调用目标控制器中的
viewDidLoad
(重要提示:不要在此之前尝试操作目标视图中的视图/控件,例如在源控制器的prepareForSegue
中);
- 只有在此之后,目标视图才会完成其布局、外观调用等。
参考资料: