2014-06-19 3 views
-1

2 개의 화면이있는 간단한 앱이 있습니다. 첫 번째부터 두 번째로 이동하기 위해 버튼을 누르면 모든 것이 성공적으로 수행됩니다 (애니메이션 포함). 내가 두 번째 화면에서 뒤로 단추를 클릭 할 때 그러나, 나는 다음과 같은 경고를 얻을 :목표 C : 뒤로 버튼이 작동하지 않습니다.

Warning: Attempt to present <getTextViewController: 0x8f6aa30> on <SecondViewController: 0x946cc80> whose view is not in the window hierarchy! 

편집 : 경고 이상에 대한 다른 질문에 저를 참조하지 마십시오 - 이미 사람들을보고, 그들은 참조 다른 문제.

그러나 여전히 첫 번째 화면으로 전환됩니다. 그러나, segue의 애니메이션은 수행되지 않습니다. 또한 : 첫 번째 화면으로 돌아 가면 첫 번째 화면의 정보 (예 : 입력 된 텍스트)가 남아 있고 두 번째 화면의 정보는 화면이 나타날 때마다 다시 설정됩니다. getTextViewController.m에

Segue from View 1 to View 2: 
Name: F21, Style: Modal, Transition: Cross Dissolve, Animation: True. 

Segue from View 2 to View 1: 
Name: F12, Style: Modal, Transition: Cross Dissolve, Animation: True. 

코드 (보기 1) :

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
if([[segue identifier] isEqualToString:@"F21"]){ 
    UIViewController *v = [segue destinationViewController]; 
    [self dismissViewControllerAnimated:NO completion:nil]; 
    v = self; 

} 
} 
-(void)performSegue:(NSString*)str{ 
[self performSegueWithIdentifier:str sender:self]; 
} 
//In some other method: 
[self performSegue:@"F21"]; 

코드 SecondViewController.m에서 (보기 2) :

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
if([[segue identifier] isEqualToString:@"F12"]){ 
    UIViewController *v = [segue destinationViewController]; 
    [self dismissViewControllerAnimated:NO completion:nil]; 
    v = self; 

} 
} 
-(void)performSegue:(NSString*)str{ 
[self performSegueWithIdentifier:str sender:self]; 
} 
- (IBAction)goBack:(id)sender { 
[self performSegue:@"F12"]; 

} 
여기

내가 두 작업을 호출하는 방법입니다

왜 두 번째하지 않는 첫 번째 segue 작품을 이해하는 데 도움이 주셔서 감사합니다.

참고 감사 : 여기에 전체 프로젝트 - https://github.com/dean13-meet/firstIOSApp 편집 : 업데이트 자식.

+0

github 프로젝트에 getTextViewController .h 및 .m 파일이 없습니다. – rdelmar

+0

왜 뒷문이 필요합니까? 이 기능은 내장되어 있습니다! 'SecondVC'를 닫은 후 그 해지 된'VC'에서 새로운'VC'를 보여주기 때문에 에러 메시지가 나타납니다. – Marc

+0

두 번째보기 컨트롤러의 첫 번째보기로 돌아가려면 segue를 사용하지 말고 단순히 사용한 [self dismissViewControllerAnimated : NO completion : nil] 메서드를 사용하십시오. – nikhil84

답변

2

prepareForSegue에서 수행하려는 작업이 정확히 무엇인지 확실하지 않아서 해당 VC를 해산 할 필요가 없습니다. VC1에서 VC2로 이동 한 다음 다시 돌아 오는 간단한 응용 프로그램을 원할 경우 가장 좋은 방법은 segueunwindSegue을 사용하는 것입니다.

그래서 스토리 보드 컨트롤에서 VC1의 버튼을 VC2로 드래그하고 segue 유형을 선택하십시오. 그런 다음 VC1.m 설정에서 언 와인드 SEGUE 같은 :

- (IBAction)unwindFromViewController:(UIStoryboardSegue *)segue 
{ 
    //empty implementation 
} 

마지막으로, VC2의 녹색 종료 아이콘으로 다시 버튼에서 VC2 제어 드래그 및 당신의 unwindFromViewController 방법을 선택합니다.

그게 당신이 찾고있는 것을해야합니다.

+0

이 작품!그러나 VC2에 입력 된 정보는 유지되지 않습니다. VC2에 Label이 있고,이 뷰를 다시 입력 할 때마다 Label이 값을 재설정합니다. 종료 할 때 VC2가 동일하게 유지되도록 할 수 있습니까? 즉, 동일한 Object 참조를 유지 하시겠습니까? –

0

편의상 모든 뒤 버튼을 처리하기 때문에 모달과 반대되는 푸시 세그를 사용하는 것이 좋습니다. 그러나 네비게이션 컨트롤러에 대한 아이디어가 마음에 들지 않으면 다음을 사용하여보기를 닫으십시오. Moving back from a Controller to a previous one