我有一个容器视图,其中包含3个视图控制器中的1个(由3个选项卡交换)(底部)。
这是我的故事板:
我正在采用这种方法,以便我可以为此大格式的所有字段设置自定义标签和单个保存按钮。
如何从条目详细信息视图控制器类中访问这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还很新。 :)
答案 0 :(得分:2)
容器视图中的视图控制器是具有容器视图的控制器的子控件。因此,您可以使用self.childViewControllers [0]访问当前子视图控制器,使用[self.childViewControllers [0] aircraftIdTextField]访问插座
答案 1 :(得分:1)
答案 2 :(得分:1)
简短的回答是,除非您编写自己的通信层,否则不能。您可以通过childViewControllers(如上所述)获取不同的视图,并在视图加载到容器视图中时在prepareForSegue方法调用中获取自己的自定义指针。 (有关详细信息,请参阅this link)如果您强制用户访问每个页面,这将非常有用。如果没有,则在第一个viewDidLoad上加载相同的默认值可能会在不检查特定视图控制器的情况下保存。
Apple的答案是永远不会有保存按钮。如果您编辑它,就意味着它,并立即保存。 =)
那就是说,我是你,我有一个对象,当你显示/隐藏不同的视图时,所有视图都可以访问加载/卸载他们的数据以进行存储,可能在viewDidLoad / viewDidDisappear中。这样,您始终可以使用“已知良好”对象进行保存,而不必直接访问这些视图控制器。
希望有所帮助。
答案 3 :(得分:0)
您需要对当前标签视图控制器的引用,然后您要求它出口:
self.entryFlightInfoViewController.aircraftIdTextField
尝试使用_aircraftIdTextField
尝试直接访问容器视图控制器类上的实例变量。显然,如果没有具有该名称的变量,则会出现编译错误。