Container View Cheatsheet
컨테이너 뷰(Container View)는 별도의 클래스가 아니라 그냥 NSView 타입이다. 단지 인터페이스 빌더에서 이런 이름으로 특수하게 제공되는 기능 중 하나이다. 이 글의 내용은 개인적인 문제 해결 기록을 정리한 것이다.
허탈하게도, 그냥 컨테이너 뷰에서 집어넣을 뷰 컨트롤러에 우클릭 드래그 하면 자동으로 붙어버린다. -_-;
우선은 스토리보드 상에서 세그(Segue)를 클릭해서 세그 아이디를 만들어 줘야 한다.
위 처럼 세그를 선택해서 세그 아이디(Storyboard Segue Identifier)를 지정한 뒤 아래와 같이 컨테이너 뷰를 가지고 있는 뷰컨트롤러에서 prepareForSegue를 오버라이드 한다.
Segue
인터페이스 빌더에서 컨테이너 뷰를 넣으면 자동으로 뷰컨트롤러가 하나 더 생겨서 연될된다. 그런데 이 연결을 지워버리면 어떻게 연결하는지 모를 수도 있다.허탈하게도, 그냥 컨테이너 뷰에서 집어넣을 뷰 컨트롤러에 우클릭 드래그 하면 자동으로 붙어버린다. -_-;
Getting Instances of Embedded View Controllers
분명 프로그래밍 하다 보면 컨테이너뷰에 들어가는 뷰 컨트롤러를 액세스 해야 할 일이 생기는데 인스턴스 레퍼런스를 어떻게 해야 알 수 있을까. 해답은 prepareForSegue를 활용하는 것이다.우선은 스토리보드 상에서 세그(Segue)를 클릭해서 세그 아이디를 만들어 줘야 한다.
위 처럼 세그를 선택해서 세그 아이디(Storyboard Segue Identifier)를 지정한 뒤 아래와 같이 컨테이너 뷰를 가지고 있는 뷰컨트롤러에서 prepareForSegue를 오버라이드 한다.
override func prepareForSegue(segue: NSStoryboardSegue, sender: AnyObject?) { guard let identifier = segue.identifier else { return } switch (identifier) { case "EmbedSomeViewController": self.someViewController = segue.destinationController as! SomeViewController ... } }이렇게 하면 이제 someViewController 를 이용해 삽입된 뷰 컨트롤러의 인스턴스를 액세스 할 수 있다.
댓글