【问题标题】:How to access multiple View Controllers from App Delegate and/or other View Controllers?如何从 App Delegate 和/或其他视图控制器访问多个视图控制器?
【发布时间】:2012-03-30 06:36:35
【问题描述】:

我怀疑这是一个非常简单的答案,或者我完全走错了路。我需要能够从 App Delegate 或另一个视图控制器在视图控制器中设置变量和访问字段等。

以前我可以通过在“didFinishLaunchingWithOptions”中执行以下操作从 App Delegate 到我的第一个视图控制器执行此操作:

viewController = (ViewController *)self.window.rootViewController;

之后,我可以/可以通过执行正常的 [viewController someMethod]; 从 App Delegate 访问视图控制器中的方法。

如果我有多个视图控制器(目前有 3 个),我如何从其他位置访问其他视图控制器?顺便说一句,我找到了一些解释,但都在谈论 nib/xibs 与代码的结合。我没有,我有故事板和代码(我是应用开发新手)。

谢谢!

【问题讨论】:

    标签: ios xcode uiviewcontroller viewcontroller


    【解决方案1】:

    在您的 appDelegate 中,您可以简单地声明将保存对此 viewController 的引用的属性。

    例如:

    在 AppDelegate.h 中

    @property (nonatomic, strong) UIViewController *vc1;
    @property (nonatomic, strong) UIViewController *vc2;
    

    在 AppDelegate.m 中

    @synthesize vc1,vc2;
    

    无论您在何处创建此viewControllers,您都可以访问您的appDelegate 并设置它的属性以保存正确的引用。不要忘记在此文件中包含AppDelegate.h

    UIViewController *someVC = [init view controller....];
    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    appDelegate.vc1 = someVC;
    

    从那时起,您可以将这个 viewController 作为 appDelegate 的属性来访问。

    编辑:对于storyBoarding,在- (void)viewDidLoad 中执行此操作似乎是安全的。

    或者更好的方法是(正如理查德所说)在 - (id)initWithCoder:(NSCoder *)decoder 中执行此操作

    “当从故事板实例化视图控制器时,iOS 通过调用它的 initWithCoder: 方法来初始化新的视图控制器。”来自documentation

    但请注意,如果您要将任何数据从一个视图控制器更改为另一个,您可能需要考虑将这些数据保存在代码的单独部分中(在model-view-controller 方法中称为model)。这将是在 viewController 之间“交换”数据的最安全方式。

    【讨论】:

    • 感谢您的回答,我想我需要一个额外的信息。我没有以编程方式初始化我的视图控制器,它由故事板处理......我如何初始化它们并将它们连接到 SB?
    • 其实忘记了,我现在和你在一起......在 App Delegate 中设置变量,然后将它的值从 VC 设置回 App Delegate。谢谢会试一试的。
    • @RichardWilliams:好的,如果您遇到问题,请“响铃”:)
    • 你能告诉我你会在哪里从 VC 中设置 AD 中的变量吗?在'viewDidLoad'里面?是否有比“viewDidLoad”更早调用的方法?再次感谢!
    • 啊哈... -(id)initWithCoder:(NSCoder *)aDecoder 似乎被调用了:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多