EDIT : 왼쪽에 하나의 질문 남기기 - 네비게이션 컨트롤러에서 제시 한 VC가 제대로 끝나기 전에 메소드를 호출하지 않도록하는 법.파일을 수락 할 때 올바른 ViewController가로드되도록하려면 어떻게해야합니까?
편집 : An useful tutorial in doing pretty much what I want, but not quite.
그래서 난이이 설정
초기 VC -> 탭 컨트롤러 -> (세 VC의, 그들 중 하나 ...) NavController 포함 된 파일 목록 -> 파일 편집기
언제든지 응용 프로그램을 가져올 수 있습니다. handleOpenUrl 메시지는 사용자가 파일 (예 : 전자 메일의 첨부 파일)을 편집하려고한다고 내 응용 프로그램 대리인에게 보냈습니다. 내 응용 프로그램의 상태에 따라 이러한 VC 중 일부 또는 전부가로드 될 수 있습니다. URL에 민감하게 반응하기 위해서는 최소한 NavController를로드해야합니다.
실제 목표는 NavController가로드 된 상태에서 현재 액티브 컨트롤러를 얻는 것이므로 AppDelegate에서 AppDelegate에서 처리 된 파일을로드하라는 메시지를 보낼 수 있습니다.
So : 여기서 가장 좋은 방법은 무엇입니까?
편집 그래서 내가 조금 주위를 연주하고, 지금까지이있어 :
내가 루트 VC는 UITabBarController가, 그리고 항상로드 것을 알고있다.
나는 내있는 navigationController 내가 그 중 하나 NC를로드 한 것을 알고, 또는 내가 탭
로 전환 그래서 알고리즘은 다음의 경우 필요에 따라 그렇게 할 것 2
인덱스 것을 알고 : 루트 탭바 VC 잡아. 이미 없으면 탭 2로 전환하도록 알려주십시오. 탭 2에서 NavigationController를 잡아라. root로 pop하고 무엇을해야하는지 말해라.
이제는이 코드에서 Navigation 컨트롤러의 루트 VC에서 호출 한 작업은 NC에 의해 현재 제시된 VC가 viewWillDisappear를 변경하기 전에 수행됩니다.
UITabBarController *root = (UITabBarController*) self.window.rootViewController;
if (root.selectedIndex != 2) {
root.selectedIndex = 2;
};
UINavigationController *nc = root.viewControllers[2];
[nc popToRootViewControllerAnimated:YES];
NSObject<SGPTFileManagerViewProtocol> *fileManager = (NSObject<SGPTFileManagerViewProtocol> *) nc.visibleViewController;
// Whoops! This method is invoked before the navigation controller is done popping a presented view controller!
[fileManager METHOD-FOR-HANDLING-THE-URL-HERE];