나는 세 개의 뷰 컨트롤러 시리즈를 가지고 있는데 처음 두 개는 UINavigationController에 래핑되고 기본값은 Main.storyboard
파일로 관리됩니다. 각각 A
및 B
이라고합시다. 파일 전체에 걸쳐 더 많은 뷰 컨트롤러가 있으며, 각 뷰 컨트롤러는 개별적으로 인스턴스화되고 개별적으로 관리됩니다. 그러나 모든 코드 솔루션으로 이동시키는 작업을 진행하고 있습니다. 이미 코드 (C
)에있는 세 번째 뷰 컨트롤러는 다양한 시간에 인스턴스화되어 B
으로 표시되는 뷰 컨트롤러입니다.프로그래밍 방식으로 unwind segue를 만들고 사용할 수있는 방법이 있습니까?
A
및 은 인터페이스 빌더에서 정상적인 연결 관계 설정을 가지고 코드를 통해 호출됩니다. 나는 C
을 B
에서 코드 (인스턴스화 및 presentViewController(_:)
)를 통해 동일하게 처리합니다. C
의 조치로 인해 B
의 존재 이유가 무효화되는 경우가 몇 가지 있습니다. 따라서 두 가지를 모두 취소해야합니다.
지금까지, 나는 C
에서 dismissViewControllerAnimated(_:)
를 호출 한 다음 B
의이 기각할지 여부를 viewDidAppear(_:)
에 확인하고, 같은 방법 그렇다면 기각. 이 과정에서 사용자는 VC 계층 구조를 통해 다시 던져지며 빈보기가 어디서 왔는지 다시보고 더 이상 작동하지 않는 컨트롤을 실험 할 시간을 남겨두고 응용 프로그램을 중단시킬 수 있습니다. 이것은 내가 버리고 싶은 다소 혼란스러운 사용자 경험입니다. 모든 것을 간단하게 비활성화 할 수는 있지만 컨트롤을 피할 수 있다면 많은 어려움을 피할 수 있습니다 ...
IB는 전체 VC 계층 구조를 동시에 해제 할 수있는 "unwind segues"를 지원한다는 것을 알고 있습니다. , 그것들은 스토리 보드에서 뷰 컨트롤러를 다루는 것만 보입니다. 이 계층 구조의 일부가 UINavigationController
에 포함되어 있다고 생각하면서 이미 수행 한 작업을 대부분 되돌릴 필요없이 프로그래밍 방식으로이 동작을 수행 할 수있는 방법이 있습니까? (A
모든 것을 닫을 수 있습니까?)
UPDATE :
그래서, 내가 해고가 제시 뷰에 대한 참조를 전달하고이 떠나기 전에 SEGUE을 기각 호출하여 제대로 작동있어. 그 접근 방식은 자체 문제와 네비게이션 컨트롤러의 기이함과 함께 왔지만, 약간의 조정으로 유용 할 수 있습니다.
솔직히이 시점에서 기능을 완전히 제거하는 것이 가장 편리 할 것입니다.
과학적으로, 나는 에테르 길을 결정할 때까지 계속 지켜보고이 방법으로 인터넷 검색을하는 사람에게 대답을하겠습니다.
UPDATE :
으으 ...이 코드가 생각보다 나이가되었다 보인다. 실제로 사용자 정의 모달 애니메이션을 B
으로 보내고 나가기 위해 두 개의 네비게이션 컨트롤러가 있습니다. 여기에는 사용자 정의 되감기 세그먼트가 있습니다 (거기에 있음). 원하는 애니메이션을 얻으려면 스토리 보드에 C
을 던져 맞춤 설정을 해보세요.
애니메이션에 신경 쓰지 않는다면 사용자 정의 풀기에서 애니메이션을 비활성화하면 B
과 C
이 즉시 사라지고 함께 사라집니다. 문제는, 내 취향에 약간의 충격이 ...
vacawama의 제안은 실제로 많은 의미를 가지며, 문서를 확인하지 않으면 바로 나를 제공합니다! UIViewController
은 이미 presentingViewController
에 대한 참조를 유지합니다. 다시 2로 돌아 가면 핀치가 생기고 그 계층 구조를 다시 올라가서 내가 원한 것을 기각합니다. 애니메이션과 같은 매력없는 작품은 전혀 일어나지 않습니다 ...
나는 지금까지 발견 한 내용으로 곧 여기에 답변을 게시 할 것입니다.
, DR사용 IB와 Ctrl 키 '종료'로 (노란색) 'C'뷰 컨트롤러,
선택 'prepareForUnwind';
스토리 보드없이 단절 기호를 사용하거나, 정상적으로 또는 되감기 할 수 없습니다. 네비게이션 컨트롤러를 가지고 있기 때문에, 직접적으로 'viewControllers' 속성을 조작 할 수 있습니다. – Paulw11
"모든 코드 솔루션으로 옮기기 위해 노력하고 있습니다 ..."왜 그렇게하고 있습니까? 프로젝트를 유지 관리하기가 더 어려워지고 작업량도 늘어납니다. – Rob
@ Paulw11 그건 내가 생각해 봤지만, 아직 나 자신을 시험 할 기회가 없었어. 내가'C '를 표시 할 때 nav 컨트롤러에 대한 참조를 전달하겠습니까? 나는 지금 그것을 시도하고 내가 찾은 것을 가지고 돌아올 것입니다. – SeizeTheDay