스토리 보드에서 Modal과 Push segue의 차이점은 무엇입니까?


178

누군가 modalpushsegue 의 정확한 차이점이 무엇인지 설명해 줄 수 있습니까 ?

pushsegue를 사용할 때 스택에 스택이 추가되어 계속 사용할 때 push메모리를 차지 한다는 것을 알고 있습니까?

누군가이 두 가지가 어떻게 구현되는지 보여줄 수 있습니까?

Modalsegues는 단순히 ctrl-click대상으로 드래그하여 만들 수 있지만 push내 앱으로 그렇게하면 내 충돌이 발생합니다.

나는에 버튼에서 밀어하고 UINavigationController있다 UIViewController.

답변:


174

푸시 SEGUE는 탐색 스택 다른 VC를 첨가한다. 이는 푸시를 시작하는 VC가 스택에 추가되는 VC가 속하는 동일한 탐색 컨트롤러의 일부라고 가정합니다. 내비게이션 컨트롤러 및 딥 스택에서는 메모리 관리가 문제가되지 않습니다. 하나의 VC에서 다른 VC로 전달하는 오브젝트를 처리하는 한 런타임은 탐색 스택을 처리합니다. 시각적 표시는 이미지를 참조하십시오. NavStack

모달 SEGUE는 모달 다른 VC를 제시 한 VC입니다. VC는 내비게이션 컨트롤러의 일부일 필요는없고, 모달로 제시된 VC는 일반적으로 제시 (부모) VC의 "자식"인 것으로 간주된다. 모달 형식의 VC는 일반적으로 탐색 모음 또는 탭 모음입니다. 제시하는 VC는 또한 그것이 생성하고 제시 한 모달 VC를 해제하는 책임이있다.

도움이 되었기를 바랍니다.


1
@EIJay 좋은 설명 주셔서 감사합니다. 언제 모달을 사용해야하고 언제 푸시 세그를 사용해야합니까?
Gaurav_soni

43
일반적으로 요약보기의 세부 사항보기를 표시하려면 탐색 제어기 및 푸시 세그를 사용하십시오. 데이터가 "자식"보기와 관련이있는 한 "부모"보기가 실제로 관련이없는 경우 모달을 사용하십시오. 모달보기의 좋은 예는 로그인보기입니다. 데이터가 "부모"보기에 관한 한 로그인보기는 실제로 아무런 관계가 없습니다.
LJ 윌슨

5
@TJ 예, "모델 체인"을 만들 수 있습니다. 체인에서 VC를 해제하면 체인에서 모든 VC가 해제됩니다. 사용자는 애니메이션을 활성화 할 때 최상위 VC 해제 만 볼 수 있습니다. 네비게이션 컨트롤러와 같습니다.
Constantino Tsarouhas 님이

3
@jchatard 예. 당신의 segue가 모달 인 한 스토리 보드에서 탐색 막대가 상속되지 않음을 알 수 있습니다. 따라서 모달 체인의 첫 번째 VC를 클릭 한 다음 메뉴 편집기-> 임베드-> 탐색 컨트롤러를 클릭하십시오. 그러면 모든 모달 체인에 공통 인 내비게이션 컨트롤러가 설정됩니다. 현재로서는 내비게이션 컨트롤러를 표시하기위한 segue 만 "모달"인 반면, 모달 체인 내부의 모든 segue는 "push"segue 여야합니다.
HpTerm

3
푸시하려는 VC가 탐색 컨트롤러를 사용하는 경우에만 푸시를 사용할 수 있습니다. 내비게이션 컨트롤러에 포함되지 않은 VC에서 푸시하려고하면 예외가 발생합니다. 따라서 이것은 데이터가 부모와 자식 사이에 얼마나 밀접하게 연결되어 있는지와 전혀 관련이 없으며 탐색 컨트롤러를 사용하여 VC를 관리하는지 여부와 관련이 있습니다. 모달 전환을 사용하는 segue를 사용하여 동일한 작업을 수동으로 정확하게 수행 할 수 있습니다.
smileBot

22

스위프트 3.0 및 XCode 8.2.1 업데이트

1. 푸시 세그

푸시 세그의 이름이 Show segue 로 변경되었습니다 . 푸시 세구를 만들려면 상위 뷰 컨트롤러가 탐색 컨트롤러에 포함되어 있어야합니다. 네비게이션 컨트롤러는 네비게이션 바를 제공합니다. 푸시 세그로 두 개의보기 컨트롤러를 연결하면 하위보기 컨트롤러에 자동으로 탐색 표시 줄이 맨 위에 표시됩니다. 자식 뷰 컨트롤러가 탐색 스택 위에 추가됩니다.

여기에 이미지 설명을 입력하십시오

푸시 세그도 기본 기능을 제공합니다. 하위 뷰 컨트롤러에는 상위 뷰 컨트롤러로 돌아갈 수있는 뒤로 버튼이 있습니다. 오른쪽으로 스 와이프하여 하위 뷰 컨트롤러를 표시 할 수도 있습니다. 푸시 세그에 대한 애니메이션은 페이지를 가로로 슬라이드하는 것과 같습니다.

여기에 이미지 설명을 입력하십시오

내비게이션 컨트롤러에없는 뷰 컨트롤러에서 푸시 세그를 만들 수 있지만 그렇게하면 내비게이션 바, 애니메이션, 제스처 등의 모든 기능이 손실됩니다. 이 경우 먼저 상위 뷰 컨트롤러를 내비게이션 뷰 컨트롤러에 포함시킨 다음 하위 뷰 컨트롤러로 푸시 세그먼테이션을 만들어야합니다.

여기에 이미지 설명을 입력하십시오

2. 모달 세구

반면에, 모달 세구 (즉, 모달로 존재)는 현재 뷰 컨트롤러에 존재한다. 자식 뷰 컨트롤러는 내비게이션 뷰 컨트롤러를 상속하지 않으므로 내비게이션 뷰 컨트롤러가있는 뷰 컨트롤러에서 모달 segue를 표시하면 내비게이션 막대가 손실됩니다. 하위보기 컨트롤러를 탐색 컨트롤러에 다시 포함시키고 원하는 경우 새 탐색 스택을 시작해야합니다. 부모 뷰 컨트롤러로 돌아가려면 직접 구현 dismiss하고 코드에서 호출해야 합니다.

여기에 이미지 설명을 입력하십시오

모달 segue의 애니메이션은 자식 뷰 컨트롤러가 페이지 하단에서 나타납니다. 내비게이션 뷰 컨트롤러도이 데모에서 사라졌습니다.

여기에 이미지 설명을 입력하십시오


6

푸시 뷰는에 내장되어 있어야합니다 navigationController.

를 클릭 master view한 다음 메뉴 표시 줄에서 다음을 선택하십시오.

EDITOR->embed in->navigationController

잘못, pushView또한없이 만들 수 있으며이 navigationController답변은 불완전합니다!
Daksh Gargas

1

스토리 보드에 사용자 정의 푸시 및 세그 방법을 사용하여 컨트롤을 푸시합니다. 스토리 보드

그리고 Modal은 스토리 보드를 사용하지 않고 뷰를 탐색하는 방법입니다.


스토리 보드를 사용하지 않고 모달 세구를 만드는 방법은 무엇입니까?
jianpx

@jianpx : 스토리 보드를 사용할 때만 쓸 수 있습니다. 그렇지 않으면 탐색 컨트롤러 또는 PresentModalViewController를 사용하여보기를 전환 할 수 있습니다.
Pushkraj

@ Pushkraj 감사합니다. 코드로 segue를 생성 할 방법이 없다는 것을 의미합니까?
jianpx

@jianpx : 필요하지 않습니다. Segue는 스토리 보드를 사용할 때만 필요했습니다.
Pushkraj
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.