OS X 앱에서 스토리보드 및 Segue 사용(개요)

Storyboard란?



Storyboard는 iOS용 화면의 천이를 그래픽으로 지정할 수 있는 화면 천이 에디터와 같은 것으로, 이것을 만드는 것만으로 화면 천이가 가능해지기 때문에 프로그래밍이 불필요(혹은 극히 약간)가 되는 뛰어난 것입니다.
iOS 전용처럼 보이지만 실은 OS X 앱에서도 사용할 수 있습니다.

OS X에서 사용하는 곳은?



윈도우의 표시(show), 팝오버(popover)나, 모달(modal)이라고 하는 디폴트의 액션이 있어 이것들을 사용하면 노코딩으로 이것들을 실시할 수 있습니다. (물론 값의 전달 등으로 코딩이 필요합니다)

그러나 가장 큰 사용법은 화면 전환이 아닙니다.
하나의 윈도우에 복수의 뷰를 표시하는 경우, 각 뷰를 NSViewContoller로 관리해, -awakeFromNib등으로 하나의 윈도우에 배치하는 것을 한 적이 없습니까?
이것이 바로 OS X에서 스토리 보드를 사용하는 곳입니다.
Storyboard를 사용하면 뷰를 배치하기 위해 코드를 작성할 필요가 없습니다.

여러 뷰를 하나의 창(뷰)에 배치



먼저 스토리보드를 만들어보자.
새로 만들기 패널에서 스토리보드를 선택하기만 하면 됩니다.


대상 NSWindwController를 배치합니다. 일반 IB에서의 작업과 동일하고 오른쪽 목록에서 드롭하면 됩니다.


IB와 달리 NSWindow와 그 ContentViewController가 연관된 형태로 배치됩니다.


이제 여러 뷰를 배치합시다. 지금까지는 여기에 더미 커스텀 뷰를 배치했다고 생각하지만 스토리 보드에서는 ContainerView라는 특별한 뷰를 사용합니다.
배치 자체는 일반 항목과 동일합니다.


ContainerView를 배치하면 NSViewController가 자동으로 배치되고 연관됩니다.
이 NSViewController가 가지는 View가 윈도우가 열렸을 때 자동적으로 대응한 ContainerView의 위치에 배치됩니다.


Storyboard에서의 배치 예


위의 배치 예를 실행했습니다.

코드는 전혀 필요하지 않습니다.

물론 대상이 윈도우가 아닌 뷰인 경우에도 방법은 마찬가지입니다.
NSWindowController 대신 NSViewController를 배치하고 그 뷰에 ContanerView를 배치하는 것입니다.

끔찍하고 간단합니다.

Outlet 연결 및 CocoaBindings 등에주의



하나의 Storyboard에 모든 NSViewController가 보이지만, Outlet 연결 등은 지금까지대로 NSViewController마다 됩니다.
NSViewController를 넘어서는 Outlet 연결 등은 할 수 없습니다.

그럼, 세구에 뭐야?



영어의 의미는 잘 모르겠지만, 기능으로서는 뷰의 천이시의 동작을 캡슐화한 것입니다. (돌진 환영)

윈도우를 표시할 때에 페이드인+줌인이 아닌 다른 애니메이션으로 표시시키고 싶을 때에 커스텀 세구에를 작성해, 표시 동작을 정의하면, 그 세구에를 Storyboard로 지정하는 것만으로 원하는대로의 천이가 가능해진다 합니다.

또한 윈도우 내에서 뷰 전환은 기본 동작으로는 할 수 없지만, 사용자 지정 세그에를 준비하면 스토리 보드에서 지정할 수 있습니다.

요약



나 자신 「어차피 Storyboard는 iOS 전용입니까? 푹스카」라고 지금까지 먹지 않고 싫었지만, 꽤 사용할 수 있습니다.
화면 천이 이외에서도 사용할 수 있다는 것을 알게 된 것이 매우 큽니다.
앞으로는 적극적으로 사용해 갈 것입니다.

시간이 있으면 실천편을 쓰고 싶다.

4월 3일 추가:
실천편을 게시했습니다.
OS X 앱에서 스토리보드와 Segue 사용하기 보기 간 전환 편

좋은 웹페이지 즐겨찾기