2016-10-13 6 views
0

同様の質問がありますが、それらは迅速に、または私の問題を解決していません。
私は、セルのように選択ボタンが押されていたとき、ナビゲーションビューコントローラを提示されたビューコントローラました:あなたは、課金が課金処理を処理するためのメインアプリの流れの全体の新しいビューの独立を開くと言うことができNavControllerに埋め込まれたviewControllerに値を渡す方法

patientBillNavigationViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PatientBillVC"]; 
//soem value assignment 
[self presentViewController:viewController animated:YES completion:nil]; 

を。
View Controllerが自動的にロードするビューは、billビューです。このビューコントローラーの値をナビゲーションビューに埋め込まれた他のviewControllerに渡したい場合は、これを実行できません。どのように値を渡す?

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil]; 
      PatientBillViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"PBVC"]; 

      vc.superBillToAddEdit = sb; 
//then display the view embedded in navigation view 

しかし、これは機能しません。私が知っている

+0

なぜそれに 'delegate protocol'を使用しないのですか?表示する前に、View Controllerを 'PatientBillViewController'のデリゲートとして設定してください。 – Adeel

答えて

0

一つの方法は、UINavigationViewControllerをサブクラスにし、そのviewDidLoadに、あなたが行うことができます:

YourEmbeddedVc *svc =self.viewControllers[0]; //get the controller reference 
svc.name= @"Hello"; 

私はあなただけのナビゲーションスタックに一方のコントローラを持っている、そうでない場合はあなたが知る必要があると仮定しています必要なVCの適切な一致。

0

質問を正確に理解していない可能性があります。私が間違っていれば私を修正してください。

ビューコントローラーからナビコントローラーを開始して(これをfirstViewControllerと呼ぶ)、firstViewControllerの値をビューコントローラーに渡して最終的にナビコントローラーにロードするように思えます。

この場合、2番目のビューコントローラ(billingStep1ViewController)を作成し、その値をプロパティとして割り当ててから、billingStep1ViewControllerをnavコントローラのinitWithRootViewController:メソッドに渡すのはなぜですか?このような

サムシング(未テストコード、ところで):

// this code would go inside our FirstViewController file 
// create the first vc that will be loaded in the nav controller 
BillingStep1ViewController *billingStepOneVc = [self.storyboard instantiateViewControllerWithIdentifier:@"stepOne"]; 
// set the value you want 
billingStepOneVc.bill = myBill; 
// create new nav controller with step one vc as the root 
UINavigationController *uiNavController = [[UINavigationController alloc] initWithRootViewController:billingStepOneVc]; 
[self presentViewController:uiNavController]; 

その方法は、あなたがお互いに直接話を2つのView Controllerを持っているとまったくナビゲーションコントローラを心配することはできません。

更新は:ここには、いくつかのが私の考えを説明するために働くコードをテストしている:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
//create the step 1 view controller - this is the first view controller we will see in the navigation controller 
StepOneViewController *stepOneVc = [storyboard instantiateViewControllerWithIdentifier:@"stepOne"]; 
//assign a value to it (name is an NSString @property of StepOneViewController) 
stepOneVc.name = @"Jones"; 

//this is the nav controller we will display, we set the root vc to our step one. 
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:stepOneVc]; 

//present the nav controller on screen. 
[self presentViewController:navController animated:YES completion:nil]; 

クラス名の一部が変更されたが考え方は同じです。

0

ナビゲーションコントローラをストーリーボード識別子から作成するのではなく、ルートビューコントローラとして作成したPatientBillViewControllerを使用してプログラムで作成します。このように:

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 

PatientBillViewController *pbVC = [mainStoryboard instantiateViewControllerWithIdentifier:@"PBVC"]; 
pbVC.superBillToAddEdit = sb; 

PatientBillNavigationViewController * navVC = [[PatientBillNavigationViewController alloc] initWithRootViewController:pbVC]; 

[self presentViewController:navVC animated:true completion:nil]; 
関連する問題