1

I have a Container View that holds 1 of 3 view controllers swapped out by 3 tabs (across the bottom).

Here's my Storyboard:

enter image description here

I'm taking this approach so that I can have custom tabs and a single Save button for all the fields in this big form.

How can I access the IBOutlets in those 3 child view controllers from inside my Entry Detail View Controller class?

Here's what I've done to try and access it in the parent.

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

Then in my parent class (Entry Detail View Controller) I can't access the property:

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

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

How do I access another view controller's IBOutlets when they are in a Container View? Hopefully I'm on the right track. Forgive me as I'm still quite new to Objective-C. :)

4

4 に答える 4

2

コンテナ ビューのビュー コントローラは、コンテナ ビューを持つコントローラの子です。したがって、現在の子ビュー コントローラーには self.childViewControllers[0] でアクセスでき、アウトレットには [self.childViewControllers[0]aircraftIdTextField] でアクセスできます。

于 2013-05-14T00:49:54.293 に答える
1

簡単に言えば、独自の通信レイヤーを作成しないとできないということです。ビューがコンテナー ビューに読み込まれるときに、prepareForSegue メソッド呼び出しで独自のカスタム ポインターを取得するだけでなく、childViewControllers (上記) を介してさまざまなビューを取得できます。(詳細については、このリンクを参照してください) ユーザーに各ページへのアクセスを強制している場合、これはうまく機能します。そうでない場合は、最初の viewDidLoad でそこにロードするのと同じデフォルトが、特定のビュー コントローラーをチェックせずに保存される可能性があります。

Apple の答えは、決して保存ボタンを持たないことです。編集した場合は、意図したとおりであり、すぐに保存されます。=)

そうは言っても、おそらくviewDidLoad/viewDidDisappearで、さまざまなビューを表示/非表示にするたびに、すべてのビューがアクセスしてストレージ用のデータをロード/アンロードするオブジェクトがあります。このようにして、「既知の適切な」オブジェクトを保存する準備ができており、それらのビュー コントローラーに直接アクセスする必要はありません。

それがいくつか役立つことを願っています。

于 2013-05-14T04:19:32.840 に答える
1

クリフトン、できる限り、VC が互いのコントロールについて知ることは避けるべきです。保存ボタンでメッセージを送信し、3 つの従属 VC にそれを監視させることができます。メッセージを受け取ると、情報を保存します。そうすれば、マスター VC はその下位のコントロールについて知る必要がありません。

于 2013-05-14T00:59:16.720 に答える