[부스트코스]iOS 프로그래밍 강좌에 대한 정리글입니다.
[부스트코스]iOS 프로그래밍 Booster 2기 활동 글입니다.
[이전 포스트]내비게이션 인터페이스에 대해 알아보고 직접 구현해보기
모달(Modal)이란 화면 전환 기법중 하나로 화면 위에 다른 화면을 띄워서 표현하는 방식입니다. 모달을 통해 나타난 화면을 사라지게 하려면 반드시 확인이나 취소와 같은 선택지를 결정해야 하기 때문에, 보통 사용자의 이목을 끌어야 할 때 사용됩니다.
이런 식으로 기존 화면 위에 띄워서 표현하는 방식입니다.
모달은 내비게이션 인터페이스와는 전혀 다른 방식으로 동작합니다. 내비게이션 인터페이스가 화면 이동을 통해 뷰를 쌓아가며 진행한다면 모달은 그 순간의 팝업을 통해 정보를 보여주고 다시 사라지게 됩니다. 그래서 내비게이션 인터페이스에서 푸쉬(push)와 팝(pop)을 사용하는 반면에 모달에서는 나타내기(present)와 사라지기(dismiss)를 사용합니다.
모달을 구현하는 방법은 내비게이션 인터페이스를 구현하는 방법과 비슷합니다. 뷰 컨트롤러를 추가하고, 해당 클래스 파일을 생성한 후, 모달을 위한 버튼을 기존 뷰 컨트롤러에 추가하면 됩니다. 상세한 내용은 이전 포스트를 참조하시기 바랍니다.
그러나 내비게이션 인터페이스에서 Show를 선택하였다면 모달에서는 Present Modally를 선택합니다.
그러면 다음과 같이 모달이 생성됩니다.
실행하였을 때, 모달은 화면 아래에서 새로운 화면이 슥 하고 올라오는 것을 확인할 수 있습니다.
모달에서 나가기 위해서는 dismiss 를 사용합니다. SecondViewController 에 올라온 모달을 사라지게 하기 위해서는 해당 클래스에 다음 메서드를 추가해서 버튼과 연결해야 합니다.
dismiss 를 수행하는 메서드입니다.
이 메서드와 연결된 버튼을 누르면 올라온 모달이 다시 내려가게 됩니다.
간혹 이 과정에서 Thread 1: signal SIGABRT 오류가 나타나는 경우가 있는데, 이는 해당 IBAction 메서드가 버튼과 정상적으로 연결되지 않아 발생하는 문제입니다. 이 경우, 뷰 컨트롤러의 인스펙터에서 Inherit Module From Target 옵션을 설정하면 정상적으로 수행됩니다.
모달은 다양한 방식이 존재합니다. 표시할 화면의 종류를 설정할 수도 있고, 전환하는 애니메이션 종류를 선택할 수도 있습니다. 이에 대해서는 Apple 개발자 문서를 참조하시기 바랍니다.
[다음 포스트]뷰의 상태변화를 감지하는 메서드 알아보기