슬라이더 및 버튼과 같은 컨트롤을 포함하는보기가 있어야하며 배경색이 있어야합니다. NSView 또는 NSViewController를 서브 클래 싱할지 여부를 알 수 없습니다. 나는 NSView를 서브 클래스 화하고, 사용자 정의 배경을 그린 다음, 컨트롤을 xib에 레이아웃하고 NSView 서브 클래스에 아웃렛을 설정할 수 있다고 생각했다.
xib를 사용하려면 NSViewController
하위 클래스로 이동해야합니다. 그것이 다른 것들 사이에있는 것입니다.
일반적으로 수행하려는 작업 (여러 컨트롤을 하나로 묶음)은 NSViewController
입니다.
Model-View-Controller 패턴 (보기 컨트롤러와 뷰가 나오는 위치)에서 볼 수도 있습니다.보기는 사물이 나타나는 방식과 관련이 있습니다. 컨트롤러는 사용자 상호 작용 (및 모델과의 상호 작용)과 관련이 있습니다.
NSView
하위 클래스를 정의하고 프로그래밍 방식으로 또는 IB (슬라이더와 버튼을 하위 뷰로 추가)에서 내용을 정의 할 수 있지만, 그렇게하지 않으면 큰 장점이 없습니다. 일종의 특정 컨트롤을 제공합니다.
편집 : 당신이 사용하는 사용자 정의를 사용하고 싶은 코멘트에
당신의 상태를하는 NSSplitView
의 내부 NSView
을 IB 정의. 이것은 상황을 좀 더 상황에 맞게 만듭니다.
이제는 많은 디자인 옵션이 있습니다. 예를 들어, 자신 만의 MySplitController
을 정의하여 분할보기의 하위보기를로드해야하는 것으로 지정할 수 있습니다.
그러나 목표를 올바르게 이해한다면, IB가 허용하는 기본보기 유형 중 하나 인 것처럼 NSSplitView 내에서 NSView를 정의하고 NSView를 NSViewplitView 내에서 사용하도록하고 싶습니다.
Interface Builder Plug-ins에 의해 허용되었습니다. 불행히도 Xcode 4에서는 더 이상 지원되지 않습니다.
그럼 내가 볼 수있는 유일한 옵션은, 예를 들어, NSView
의 MyCustomView
를 서브 클래스를 정의하는 다음의 initWithFrame:
방법으로 당신이 그것을에 정의 된 뷰를 식별의 XIB 파일을로드하고, 하위 뷰로 추가. 일을 단순화하기 위해
NSNib *nib = [[[NSNib alloc] initWithNibNamed:@"MyView" bundle:nil] autorelease];
NSArray *topLevelObjects;
if (![nib instantiateWithOwner:customViewOwner topLevelObjects:&topLevelObjects]) {
//- handle error
}
MyView *myView = nil;
for (id topLevelObject in topLevelObjects) {
if ([topLevelObject isKindOfClass:[MyView class]) {
myView = topLevelObject;
break;
}
}
, 당신은 사용자 정의를 정의이 XIB 파일을 가질 수 있습니다
특히, 당신은 XIB 사용자 정의보기가 발견 될 중 최고 수준의 개체를 파일을로드하려면이 코드를 사용할 수 있습니다 NSView와 유비쿼터스 File 's Owner (뷰를 나머지 앱에 통합하는 링크입니다).
본인은 customViewOwner
을 instantiateWithOwner
으로 전달합니다.이보기는 사용자 정의보기에서 오는 모든 동작에 응답하고 필요할 때 상태를 설정하는 주보기 컨트롤러 또는 앱 대리인이됩니다. 이 클래스는 xib의 파일 소유자이기 때문에 실제로 모듈화 된 디자인을 사용하려면 특정 프로젝트에서 하위 클래스로 정의한 MyCustomViewController
을 정의하는 것이 좋습니다.
사용자 정의 NSView 하위 클래스를 정의한 후에는 NSSplitView에 통합하기 위해 수행해야 할 작업은 NSSplitView의 하위 뷰 클래스를 MyCustomView
으로 설정하는 것입니다.
이것은 IB 플러그인을 사용하는 것만 큼 단순하지는 않지만 다른 xib 파일에 정의 된보기를 통합하는 목적에 적합 할 수 있습니다.
그래서 NSViewController를 서브 클래 싱했습니다. 인터페이스 빌더 (메인 펜의 xib에 별도의 펜촉으로)에 내 컨트롤을 추가했는데, 주 펜촉의 창에 뷰 컨트롤러의 뷰를 추가하려면 어떻게해야합니까? –
당신의 앱 델리게이트에서, 당신은 사용자 정의 뷰 컨트롤러를 인스턴스화하고 그것을 강력한 속성으로 저장 한 다음'myController.view'를 윈도우에 서브 뷰 ('addSubview :')로 추가합니다. – sergio
그래서 IB에서 할 수 없습니까? –