2012-03-13 12 views
4

私はこれが非常に簡単な答えか、まったく間違っていると思います。私は、変数を設定し、App Controllerや別のView ControllerからView Controllerのフィールドなどにアクセスできるようにする必要があります。私は「didFinishLaunchingWithOptions」で次の手順を実行して、私の最初のビューコントローラへのアプリケーションの委任からこれを行うことができます以前App Delegateやその他のView Controllerから複数のView Controllerにアクセスするにはどうすればいいですか?

のViewController =(ViewControllerを*)self.window.rootViewController。

その後、私は通常の[viewController someMethod];を実行して、App DelegateからView Controller内のメソッドにアクセスできました。

複数のビューコントローラ(現在3つ)がある場合、他の場所から他のビューコントローラにアクセスするにはどうすればよいですか?ちなみに私はいくつかの説明を見つけましたが、コードと組み合わせたnib/xibについてはすべて話します。私はそれらを持っていない、私はストーリーボードとコードが(私はアプリの開発者に新しいです)です。

ありがとうございます!

答えて

5

appDelegateでは、このviewControllersへの参照を保持するプロパティを宣言できます。例えば

:AppDelegate.m

@synthesize vc1,vc2; 

あなたはこのviewControllersを作成しているどこにあなたがappDelegateにアクセスし、それを保持するためのプロパティです設定することができますでAppDelegate.h

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

正しい参照。このファイルにAppDelegate.hを含めることを忘れないでください。

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

そして、このviewControllerには、appDelegateのプロパティとしてアクセスできます。

EDIT:物語のためにこれは- (void)viewDidLoadで行うのが安全だと思われます。

または(リチャードが述べたように)より良いアプローチは- (id)initWithCoder:(NSCoder *)decoder

でこれを行うことであろう、「ストーリーボードからビューコントローラをインスタンス化する場合、iOSのは、そのinitWithCoder呼び出すことによって、新しいビューコントローラを初期化します。代わりに、メソッドを」 documentation

からしかし、あなたは別のビューコントローラから任意のデータを変更している場合は、(そうmodel-view-controllerアプローチでmodelと呼ばれる)コードの別の部分で、このデータを保持して検討する必要がありますので、予めご了承ください。これは、viewControllers間でデータを交換する最も安全な方法です。

+0

答えをいただきありがとうございます。追加情報が1つ必要です。 View Controllerをプログラムで初期化するのではなく、ストーリーボードによって処理されます...私はそれらを初期化してSBに接続しますか? –

+0

実際にそれを忘れて、今私はあなたと一緒にいる... App Delegateで変数を設定し、VCからApp Delegateに値を戻すように設定します。ありがとうございます。 –

+0

@RichardWilliams:問題に遭遇した場合には、ちょうど「鳴ります」 –

関連する問題