2010-06-02 3 views
2

소스 목록의 다른 요소가 주 콘텐츠 영역에서 다른보기를 표시하도록하는 iTunes 스타일로 소스 목록을 사용하는 Cocoa 데스크톱 응용 프로그램을 개발 중입니다.별도의 NIB 파일에서로드 된 하위보기를 표시하는 방법

내용 영역은 전체적으로 (수직) NSSplitView으로 채워집니다. 왼쪽에 NSOutlineView 소스 목록이 있습니다. 사용자가 왼쪽의 항목을 선택하면 관련 뷰가 스플리터의 오른쪽에 나타납니다.

모든 것을 하나의 NIB 파일에 넣고 테두리가없는 NSTabView을 스플리터 오른쪽에 붙이면 충분히 잘 작동합니다. 보기를 전환하려면 선택한 탭을 변경해야합니다. 그러나 모든 견해를 하나의 NIB에 넣는 것은 나쁜 습관이므로 각 하위 뷰를 NIB 파일로 이동하려고합니다.

나는이 과정의 대부분의 꽤 좋은 생각을 가지고 - 나는 (등등 EntityDetailViewController, GroupDetailViewController 등)이 각보기에 대한 NSViewController 서브 클래스를 만들었습니다, 관련 컨트롤러에 각각의 새로운 NIB의 파일의 소유자를 설정 각 NIB에서 view 연결을 설정하고 바인딩을 다시 작업하십시오. 내가 모르는 것은 화면에 어떤 하위 뷰가 표시되는지 실제로 변경하는 방법입니다.

오른쪽에 기본 제본 NSView을 사용하여 메시지를 보내려고 시도했습니다. addSubview: 메시지입니다. 첫 번째 하위보기 및 호출로 연결하려고 시도했습니다.

NSView *newSubview = /* get subview from the new subview controller */ 
[[subview superview] replaceSubview:subview with:newSubview]; 
[self setSubview:newSubview]; 

하지만 모든 것이 공백으로 남겨 둡니다. 별도의 NIB에서로드 된 하위보기를 표시하려면 어떻게합니까?

+0

Marcus,이 작업을 수행 할 수 있었습니까? – tofutim

답변

0

일반적인 접근 방식이 적당합니다. 로드 된보기 컨트롤러의 newSubview이 nil이 아닌지 확인 했습니까? newSubview의 프레임이 뷰 계층 구조에 추가되기 전과 이후에 올바르게 표시됩니까? 마지막으로, 어떤 시점에서 replaceSubview: 코드를 사용하고 있습니까? awakeFromNib 이상이어야합니다.

관련 문제