访问容器视图中的另一个View Controller的IBOutlet

时间:2013-05-13 22:49:48

标签: ios objective-c container-view

我有一个容器视图,其中包含3个视图控制器中的1个(由3个选项卡交换)(底部)。

这是我的故事板:

enter image description here

我正在采用这种方法,以便我可以为此大格式的所有字段设置自定义标签和单个保存按钮。

如何从条目详细信息视图控制器类中访问这3个子视图控制器中的IBOutlets?

以下是我在父母中尝试访问它所做的工作。

//EntryFlightInfoViewController.h (Child 1)
@property (strong, nonatomic) IBOutlet UITextField *aircraftIdTextField;

然后在我的父类(Entry Detail View Controller)中,我无法访问该属性:

//EntryDetailViewController.m (Parent)
#import "PPEntryFlightInfoViewController.h"

- (IBAction)buttonSave:(id)sender {
  NSLog(@"save: %@", _aircraftIdTextField); //(!) Error: Use of undeclared identifier '_aircraftIdTextField'
}

如何在容器视图中访问另一个视图控制器的IBOutlets?希望我走在正确的轨道上。请原谅我,因为我对Objective-C还很新。 :)

4 个答案:

答案 0 :(得分:2)

容器视图中的视图控制器是具有容器视图的控制器的子控件。因此,您可以使用self.childViewControllers [0]访问当前子视图控制器,使用[self.childViewControllers [0] aircraftIdTextField]访问插座

答案 1 :(得分:1)

克利夫顿,只要你能,你应该避免风险投资者了解彼此的控制。你可以让保存按钮发出一条消息,并让三个下属VC观察它。当他们收到消息时,他们会保存他们的信息。这样,主VC就不必了解其下属内部的控件。

答案 2 :(得分:1)

简短的回答是,除非您编写自己的通信层,否则不能。您可以通过childViewControllers(如上所述)获取不同的视图,并在视图加载到容器视图中时在prepareForSegue方法调用中获取自己的自定义指针。 (有关详细信息,请参阅this link)如果您强制用户访问每个页面,这将非常有用。如果没有,则在第一个viewDidLoad上加载相同的默认值可能会在不检查特定视图控制器的情况下保存。

Apple的答案是永远不会有保存按钮。如果您编辑它,就意味着它,并立即保存。 =)

那就是说,我是你,我有一个对象,当你显示/隐藏不同的视图时,所有视图都可以访问加载/卸载他们的数据以进行存储,可能在viewDidLoad / viewDidDisappear中。这样,您始终可以使用“已知良好”对象进行保存,而不必直接访问这些视图控制器。

希望有所帮助。

答案 3 :(得分:0)

您需要对当前标签视图控制器的引用,然后您要求它出口:

self.entryFlightInfoViewController.aircraftIdTextField

尝试使用_aircraftIdTextField尝试直接访问容器视图控制器类上的实例变量。显然,如果没有具有该名称的变量,则会出现编译错误。