2017-11-23 4 views
1

필자는 이전 뷰 컨트롤러의 버튼에서 performSegue을 통해 모두 "푸시"된 뷰 컨트롤러 세트를 보유하고 있습니다. 나는 풀어서 쓸모없는 부분을 알고 있지만 정확히 왜 원래의 VC로 되돌아가는 또 다른 부분을 만드는 것이 나쁜 생각인지 정확히 궁금해합니다. 예를 들어 VCA와 VCB가 있습니다. performSegue을 사용하여 VCA에서 VCB로 푸시 한 다음 다시 VCA에 performSegue을 수행하는 VCB에 다시 버튼이 있습니다. 나는 초기 단편을 풀 수 있다는 것을 알고 있지만 몇 가지 단편을 사용하는 데 분명한 해가됩니까? 프로그램 뷰 컨트롤러에 다시 갈푸는 대신 여러 장을 사용하여 돌아가는 것이 좋지 않습니까?

답변

0

오른쪽 방법은 performSegue를 호출하고 수행하는 SEGUE 탐색 스택에 추가됩니다 VC를 보여 ShowSegue 인 경우 "다시 버튼을 누르면 경우

navigationController?.popViewController(animated: true). 

를 호출하는 것입니다 "당신은 닫힌 것으로 간주되는 VC로 돌아갈 것입니다. 그래서,

0

는 단순히 다시 밀어 다른 SEGUE를 생성하는 것은 좋지 않은 생각이다 (당신이 프로그래밍 방식을 선호하는 경우) 또는 popViewController 기능 (당신은 스토리 보드 방식을 선호하는 경우)는보다 효율적으로 사용의 언 와인드의 SEGUE을있는 navigationController을 사용하는 경우 원본 VC?

예는 UINavigationController에서 이전보기 컨트롤러에 다시 것에 대해 이야기 할 때하는 , 그것으로 터지는 새로 추가 평균 것이다 밀어 의미하기 때문에 "다시 밀어 것은"종류의 부적절한 용어라고 언급이다. 그렇지 않으면 뷰 컨트롤러를 뒤로 밀어도 탐색 스택에서 현재보기 컨트롤러를 제거하지 않는다는 의미는 아니며 다음과 같은 점을 고려하여 더 명확하게하기 위해 다음을 고려하십시오.

응용 프로그램에서 4 뷰 컨트롤러는, 스택에 현재의 네 번째 하나입니다

A => B => C => D

이의 당신이 "다시 밀어"하는 것을 목표로한다고 가정하자에 "는 B", 그 뜻입니다 네비게이션 스택이 다음과 같아야합니다 :

A => B => C => D => B하지만 하지예상치 못한 결과가 일반적으로 A => B : 리드가 그 사이에 다시 "D"로 갈 것입니다 최신 뷰 컨트롤러에서 터지는 첫 번째 시나리오 ("B")에 대한 최신보기 컨트롤러에서 터지는 두 번째 시나리오는 당연히 예상되는 동작 인 "A"으로 다시 연결됩니다.

그럼 적절한 방법은 무엇입니까?

UINavigationController을 가지고

나타나는 평면도의 탐색 스택에서 컨트롤러는 디스플레이를 갱신한다.

이는 최신 (단 하나의)보기 컨트롤러를 팝한다는 것을 의미합니다.

사용법 :

navigationController?.popViewController(animated: true) 

출력 :

A => B => C

루트 뷰 컨트롤러 ("A는 "), 당신이 사용할 수에 직접 팝업을 목표로하는 경우

팝 모든 뷰 컨트롤러와 디스플레이를 업데이트합니다.

사용법 :

navigationController?.popToRootViewController(animated: true) 

출력 :

A

마지막으로, 당신이에 특정 뷰 컨트롤러 (양식 "D"에 팝업을 목표로하는 경우 " B ")를 통해 반복해야합니다. 73,210 어레이 호 :

팝스 컨트롤러를 확인.

사용법 :

if let nvc = navigationController { 
    for vc in nvc.viewControllers { 
     if vc is BViewController { 
      navigationController?.popToViewController(vc, animated: true) 
      break 
     } 
    } 
} 

출력 :

A => B

돌아 가기

segues에 :

,536,913,632 10

위의 설명에 따라 unwind segues를 사용해야합니다. 당신은 확인 할 수 있습니다 :

관련 문제