(1) 귀하가 인용 한 기술 노트 TN2298을 오해하고 (2) viewControllerForUnwindSegueAction:
을 적절하게 무시하지 않아야합니다. 당신은 컨테이너 뷰 컨트롤러에 대해에 링크 된 TN2298의 문서 섹션으로
는 "은 긴장을 풀고 작업을 처리 할 수있는 자식보기 컨트롤러 선택"부제목 아래에 상태 :
메소드를 오버라이드 (override) 할 필요가 귀하의 컨테이너 뷰 컨트롤러가 에 표시된
[viewControllerForUnwindSegueAction :] 자식을 검색하려면 unwind를 처리하려는보기 컨트롤러에 대한 컨트롤러보기 작업. 컨테이너의 자식 뷰 컨트롤러 중 어느 것도 unwind 동작을 처리하지 않으려는 경우 super 구현을 호출하고 결과를 반환해야합니다.
먼저 오프, 방법을 대체 할, 당신은 당신의 스토리 보드에서 UINavigationController
를 서브 클래스 화해, 거기에 viewControllerForUnwindSegueAction:
방법을 추가해야합니다. 그렇게하면 메서드가 현재 예상대로 호출되는 것을 볼 수 있습니다.
두 번째 오류는 현재 viewControllerForUnwindSegueAction:
메서드를 재정의하려는 시도가 단순히 return self;
을 포함한다는 것입니다. unwind 동작을 처리 할 뷰 컨트롤러를 반환해야합니다.
그래서 말을, 예를 들어, 당신은 BTableViewController
의 현재 인스턴스를 보유 할 VCWithContainedVCsViewController
에서 공용 변수가 그리고 당신은 당신이 현재 컨테이너 뷰 컨트롤러, 전 액세스 할 수있어 액세스 :
- (UIViewController *)viewControllerForUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender
{
NSLog(@"Technical note TN2298 indicates child VCs defer to their parent to determine where an unwind segue will be handled.");
if ([NSStringFromSelector(action) isEqualToString:@"bUnwindSegue:"]) {
NSLog(@"%@", self.viewControllers);
VCWithContainedVCsViewController *containerVC = (VCWithContainedVCsViewController*)self.viewControllers[0];
return containerVC.container;
}
return [super viewControllerForUnwindSegueAction:action fromViewController:fromViewController withSender:sender];
}
을 당신 이 경우 실제로는 bUnwindSegue:
이 호출되고 (메시지가 인쇄되어야 함) 볼 수는 있지만, 여전히 segue는 발생하지 않습니다.
왜 이런가요?
의견에서 언급 한 바와 같이 BTableViewController
은 현재 탐색 스택에서 이 아니기 때문에입니다. CTableViewController
과 같은 BTableViewController
의 일부 하위보기 컨트롤러는 예를 들어 CTableViewController
이 컨테이너보기가 아니기 때문에 탐색 스택에 표시됩니다. 그러나 BTableViewController
자체는 현재 탐색 스택에 없으므로 자체적으로 segue를 수행 할 수 없습니다. 따라서 문서 상태와 같이 unwind 액션을 처리 할 자식 뷰 컨트롤러를 실제로 선택할 수는 있지만 BTableViewController
은 그 중 하나가 될 수 없습니다.
unwind segue 메소드는 * to *로 되 돌리는 뷰 컨트롤러에 있어야합니다. –
@LyndseyScott BTableViewController는 unwnd되고있는 VC입니다. – memmons
@LyndseyScott 현재 unwind segue는 스토리 보드를 통해 설정됩니다. 변경 사항도 거기에서 발생해야합니다. 또는 스토리 보드를 풀고 프로그래밍 방식으로 설정할 수 있습니다. 두 경우 모두 똑같이 행동 할 것으로 기대합니다. – memmons