2016-10-13 2 views
0

비슷한 질문이 있지만 신속하게 문제를 해결할 수 없습니다.
내가 셀로 선택 버튼을 누르면했을 때 네비게이션 뷰 컨트롤러를 제시하는 뷰 컨트롤러했습니다 : 당신은 청구 대금 청구 프로세스를 처리 할 수있는 주요 응용 프로그램 흐름의 완전히 새로운보기 독립을 열어 말할 수NavController에 포함 된 viewController에 값을 전달하는 방법

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

합니다.
View Navigation 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

왜 '위임 프로토콜'을 사용하지 않습니까? 그것을 제시하기 전에 View Controller를'PatientBillViewController'의 델리게이트로 설정하십시오. – Adeel

답변

0

한 가지 방법은 viewDidLoadUINavigationViewController와 하위 클래스, 당신은 할 수 있습니다 :

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

을 당신은 탐색 스택에서 하나의 컨트롤러가있는 있으리라 믿고있어, 당신이 알 필요가없는 경우 필요한 VC의 적절한 일치.

0

나는 정확하게 질문을 이해하지 못할 수도있다. 틀렸다면 나를 바로 잡을 수도있다.

보기 컨트롤러에서 nav 컨트롤러를 시작한 다음 (이 코드를 firstViewController이라고 부름) firstViewController의 값을 탐색 컨트롤러에로드 할보기 컨트롤러로 전달하려는 것처럼 들립니다.

그런 경우 두 번째보기 컨트롤러 (billingStep1ViewController)를 만든 다음 값을 속성으로 할당 한 다음 billingStep1ViewController를 nav 컨트롤러의 initWithRootViewController: 메서드로 전달하지 않으시겠습니까? 이 같은

뭔가 (테스트되지 않은 코드, BTW) :

// 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]; 

그런 식으로 당신이 서로 직접 이야기 두 개의 뷰 컨트롤러가 전혀 네비게이션 컨트롤러에 대해 걱정하지 않아도됩니다.

업데이트 : 여기에 일부 내 아이디어를 설명하기 위해 노력 코드 테스트입니다 :

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]; 
관련 문제