2012-06-14 4 views
1

두 번째보기 컨트롤러를 추가 한 간단한 단일보기 iOS 5 응용 프로그램이 있습니다. 내비게이션 컨트롤러 내부에 이들을 내장했으며 FirstViewController에 두 개의 버튼을 배치했습니다. 이 버튼들 각각은 iPhone 애플리케이션의 UI에 내 SecondViewController를 차례로 표시하는 세그 (segue)에 대한 명명 된 식별자를 가지고 있습니다.ViewControllers간에 데이터 공유

모두 예상대로 작동하지만 두 번째보기 컨트롤러의 레이블에 'Button 1'을 클릭 한 것과 같은 간단한 내용을 표시하고 싶습니다. 이 AppDelegate에서 선언 한 NSMutableString 변수에이 데이터를 수동으로 배치하려고 시도했습니다.이 AppDelegate는 두 번째보기 컨트롤러에서 연결할 수 있지만 할당 된 값은 화면에 표시되지 않습니다.

분명히 SecondViewController의 새 인스턴스가 만들어지고 이것이 내가 볼 수없는 이유 일 수 있습니다. 이 값을 유지하기 위해 myLabel이라는 이름의 UILabel 유형의 IBOutlet을 만들었지 만 아아아, 나는 변화가 없습니다.

도움을 주시면 감사하겠습니다.

참고 : 코드를 게시하게되어 기쁩니다.하지만 제 질문에 도움이 될 것이라고 생각하지 않습니다.

답변

1

보기 컨트롤러간에 데이터를 전달하려면 을 고려해야합니다. 1. 추가 정보 또는 을 전달하는보기 컨트롤러에 대한 사용자 지정 init 만들기 2. 첫 번째보기 컨트롤러에서 액세스하는 두 번째보기 컨트롤러에서 속성 만들기.

작성한 IBOutlet에 속성을 만들 수 있지만보기가로드 된 후 첫 번째보기 컨트롤러에서 속성에 액세스하는 경우이를 확인해야합니다.

항상이 상황에서 현재의 코드

+0

을 내가 대답하고 있었다 정확하게. +1 – 11684

2

내 솔루션을 보지 않고 더 많은 방향을 제시하기 위해 사용자 정의 -init 방법 하드입니다. 이러한

-initWithButtonPressedString:(NSString*)message; 

로 두 번째 뷰 컨트롤러에서 것을 선언하고 호출

다음
self.secondView = [[SecondViewController alloc]initWithButtonPressedString:@"some conditional string"]; 

, 모두가 필요한 것은 전달 된 문자열을 처리 할 수있는 두 번째 뷰 컨트롤러에 바르이다.

0

스토리 보드를 사용합니까? 어쨌든 인터페이스 빌더에서 IBOutlet을 변수에 연결 했습니까? 당신은 스토리 보드를 사용하는 경우이 방법을 사용하려고 할 수

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

즉 을했다.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"ChooseToDetailsSegue"]) { 
     preparedSegue = segue; 
     SaleDetailsViewController *saleDetailsVC = [preparedSegue destinationViewController]; 
     saleDetailsVC.saleDetailsProduct = [elementsArray objectAtIndex:selectedRow]; 
     saleDetailsVC.cardTransactionDetails = [[cardDetails alloc] init]; 
     saleDetailsVC.cardTransactionDetails.number = infoCardNumber; 
     saleDetailsVC.cardTransactionDetails.month = infoExpiriationM; 
     saleDetailsVC.cardTransactionDetails.year = infoExpiriationY;  
    } 
} 

새로운 ViewController (대상)를 초기화하고 해당 변수를 참조하면됩니다.

0

알림을 사용할 수도 있습니다. 당신의 FirstViewController의 첫 번째 버튼의 IBAction를, 당신은 당신의 두 번째 단추의 IBAction를 유사

NSNotification *messageFromFirstViewController = [NSNotification notificationWithName:@"firstbuttonMessage" object:@"You clicked Button 1"]; [[NSNotificationCenter defaultCenter] postNotification:messageFromFirstViewController];

뭔가를 추가 할 수 있습니다.

은 SecondViewController의 viewDidLoad에, 당신은 다음

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(useNotification:) name:@"firstButtonMessage" object:nil]; 

이 myLabel을 변경하려면 useNotification 방법을 만들기 추가 할 수 있습니다

-(void) useNotification:(NSNotification *)notification { 
self.myLabel.text = notification.object;}