6

내 프로젝트 중 하나에 대한 스토리 보드를 시험해 보면서 나는 좋은 해결책이없는 무언가를 발견했습니다.Storyboards로 모달보기 컨트롤러를 닫기 전에 viewController를 푸시하는 방법은 무엇입니까?

저는 UITableViewController를 보여주는 탐색 기반 응용 프로그램이 있습니다. tableView는 사용자가 만든 요소로 채워집니다. 요소 셀을 탭하면 상세 뷰 컨트롤러가 나타납니다. 사용자는 tableView에서 버튼을 탭하여 새 요소를 만들 수 있습니다. 이것은 모달 뷰를 가져 오며, 이는 생성을 처리합니다.

사용자가 요소 작성을 완료하고 모달보기 컨트롤러를 닫을 때 사용자가 해당 세부 뷰 컨트롤러를보고 표보기를 보지 못하게해야합니다. 그러나 스토리 보드에서이를 달성하는 방법을 알 수는 없습니다.

아무에게도 좋은 패턴이 있습니까?

현재 상황

TableView --(tap create)--> creation modal view --(finish creating)--> TableView 

TableView --(tap create)--> creation modal view --(finish creating)--> detail view 
+0

내 답변을 아래에 추가했습니다. 스토리 보드로이 작업을 수행 할 수있는 더 좋은 패턴은 여전히 ​​인정 받고 있습니다. – SpacyRicochet

답변

0

내가 가지고 올 수있는 가장 좋은 패턴 일 경우, 코드의 기존 패턴과 동일합니다.

모달 뷰 컨트롤러에 (nonatomic, weak) UINavigationController *sourceNavigationController 속성을 추가하십시오. 의 TableView의 prepareForSegue:에 다음 코드를 추가

DetailViewController *detailViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"]; 
detailViewController.element = newlyCreatedElement; 
[[self sourceNavigationController] pushViewController:detailViewController animated:NO]; 

그리고 sourceNavigationController가 제대로 설정 얻을 있는지 확인 :

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"newElementSegue"]) { 
     [[segue destinationViewController] setSourceNavigationController:self.navigationController]; 
    } 
} 
1
는 모달 뷰 컨트롤러를 기각하는 시간이되면, 다음 코드를 추가합니다

네비게이션 컨트롤러에 뷰 컨트롤러를 생성하고 푸시 세그 (push segue)를 사용하여 생성보기 컨트롤러를 상세보기 컨트롤러에 연결할 수 있습니다. 데이터 생성이 끝나면 상세 뷰 컨트롤러의 인스턴스로 이동합니다.

세부보기에서 테이블보기로 직접 돌아가려면 세부보기 컨트롤러 (예 : @property (nonatomic) BOOL cameFromCreationViewController;)에 속성을 추가 할 수 있습니다. 소스 뷰 컨트롤러에서 prepareForSegue:에이 속성을 설정할 수 있습니다. 자세히보기에서 나만의 뒤로 버튼을 만들고 탭하면 다음과 같이 할 수 있습니다.